मैंने क्रोम सामान्य मोड में पाइथन सेलेनियम के साथ अपनी स्वचालित स्क्रिप्ट समाप्त कर ली है और सब कुछ बढ़िया काम करता है।

जब तक मैंने इसे हेडलेस मोड में काम करने का फैसला नहीं किया, तब तक मैं आंशिक लिंक टेक्स्ट का पता नहीं लगा सकता जो पहले से ही सामान्य मोड में काम करता है।

मैं इस कोड का उपयोग हेडलेस में क्रोम खोलने के लिए कर रहा हूं।

option = webdriver.ChromeOptions()
option.headless = True
option.AddArgument("window-size=1200,700");

यह वह कोड है जिसका उपयोग मैं तत्व का पता लगाने के लिए करता हूं

tmp  = True
while tmp:
    try:
        Confirmm = driver.find_element_by_partial_link_text('Confirm')
        Confirmm.click()
        tmp = False
    except:
        continue

और यह उस लिंक टेक्स्ट का कोड है जिसे मैं क्लिक करने का प्रयास कर रहा हूं

<a href="https://temp-mail.org/en/view/346e2949a4a1f77ededd7542ba7947ed" title="" class="viewLink title-subject" data-mail-id="346e2949a4a1f77ededd7542ba7947ed">Confirm your profile</a>

नोट: डेटा-मेल-आईडी= स्थिर नहीं है और हर बार बदलता है।

मैंने जावास्क्रिप्ट का उपयोग करने की कोशिश की, लेकिन जिस शब्द पर मैं क्लिक करना चाहता हूं, उसका कोई आईडी, नाम या TAG-NAME नहीं है, और क्लासनाम भी काम नहीं करता है।

कुछ पता है इसे कैसे हल करना है?

1
obaskly 12 जिंदा 2021, 23:09

2 जवाब

सबसे बढ़िया उत्तर

अपनी प्रोफ़ाइल की पुष्टि करें के रूप में टेक्स्ट वाले तत्व पर क्लिक करने के लिए आप निम्न में से किसी एक का उपयोग कर सकते हैं लोकेटर रणनीतियां:

  • link_text का उपयोग करना:

    driver.find_element_by_link_text("Confirm your profile").click()
    
  • partial_link_text का उपयोग करना:

    driver.find_element_by_partial_link_text("Confirm").click()
    
  • css_selector का उपयोग करना:

    driver.find_element_by_css_selector("a.viewLink.title-subject[href^='https://temp-mail.org/en/view']").click()
    
  • xpath का उपयोग करना:

    driver.find_element_by_xpath("//a[@class='viewLink title-subject' and starts-with(@href, 'https://temp-mail.org/en/view')][contains(., 'Confirm your profile')]").click()
    

आदर्श रूप से, उस तत्व पर क्लिक करने के लिए जिसे आपको प्रेरित करने की आवश्यकता है WebDriverWait element_to_be_clickable() के लिए और आप निम्न में से किसी एक का उपयोग कर सकते हैं लोकेटर रणनीतियां:

  • LINK_TEXT का उपयोग करना:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Confirm your profile"))).click()
    
  • PARTIAL_LINK_TEXT का उपयोग करना:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Confirm"))).click()
    
  • CSS_SELECTOR का उपयोग करना:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.viewLink.title-subject[href^='https://temp-mail.org/en/view']"))).click()
    
  • XPATH का उपयोग करना:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='viewLink title-subject' and starts-with(@href, 'https://temp-mail.org/en/view')][contains(., 'Confirm your profile')]"))).click()
    
  • नोट: आपको निम्नलिखित आयात जोड़ने होंगे:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0
DebanjanB 13 जिंदा 2021, 00:52

पृष्ठ का स्क्रीन शॉट प्राप्त करने का प्रयास करें और सत्यापित करें कि लिंक उपलब्ध है या नहीं। कभी-कभी वेबसाइटें हेडलेस ब्राउजर का पता लगा लेती हैं और वेबसाइट को अलग तरह से प्रदर्शित करती हैं।

  driver.get_screenshot_as_file(f"screenshot.png")

यदि प्रदर्शित वेबसाइट अलग है तो कस्टम कस्टम हेडर सेट करें (जैसा कि वेबसाइट को पता चलता है कि ब्राउज़र उपयोगकर्ता के उपयोग से बिना सिर के है):

from selenium import webdriver


options = webdriver.ChromeOptions()

options.add_argument("--window-size=1920,1080")
options.add_argument("--headless")
options.add_argument("--disable-gpu")
options.add_argument(
    "user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36")
browser = webdriver.Chrome(options=options)

वेबड्राइवर प्रतीक्षा का भी उपयोग करें:

WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Confirm"))).click()
0
PDHide 13 जिंदा 2021, 09:20