Я закончил свой автоматический скрипт с помощью python selenium в нормальном режиме Chrome, и все работает отлично.

Пока я не решил заставить его работать в режиме без заголовка, поэтому теперь я не могу найти частичный текст ссылки, который уже работает в обычном режиме.

Я использую этот код, чтобы открыть хром без головы.

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>

ПРИМЕЧАНИЕ : data-mail-id = не статичен и меняется каждый раз.

Я пытался использовать Javascript, но слово, которое я хочу нажать, не имеет ID, NAME или TAG-NAME, а ClassName также не работает.

Есть идеи, как это решить?

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 12 Янв 2021 в 21: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)

Также используйте webdriver wait:

WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Confirm"))).click()
0
PDHide 13 Янв 2021 в 06:20