Chrome драйвер не может обнаружить поле электронной почты в Gmail с включенным безголовым режимом - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь войти в Gmail с помощью selenium webdriver.

Следующий код работает без опции headless, и я могу успешно войти:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_argument(" — incognito")
loadtime = 4.0

try:
    browser = webdriver.Chrome(chrome_options=options)
except:
    browser = webdriver.Chrome('./chromedriver', chrome_options=options)

gmail_link = 'https://accounts.google.com/signin'

browser.get(gmail_link)

email = WebDriverWait(browser, loadtime).until(EC.visibility_of_element_located((By.ID, "identifierId")))
email.send_keys('my_email')
nextButton = WebDriverWait(browser, loadtime).until(lambda x: x.find_element_by_id('identifierNext'))
nextButton.click()

password = WebDriverWait(browser, loadtime).until(
    EC.element_to_be_clickable((By.XPATH, "//input[@name='password']"))
)
password.send_keys('my_password')
browser.find_element_by_id("passwordNext").click()

Но если я добавлю следующую опцию , он просто не может найти элемент электронной почты и выдает тайм-аут.

options.add_argument('--headless')

Прежде чем вы отметите этот вопрос как повторяющийся (я знаю, что есть много других похожих вопросов, но ни один из них мне не помог):

Я хотел бы упомянуть, что это работает для других веб-сайтов, например, я могу go войти в facebook и войти в систему с опцией «Без головы». Но похоже, что по какой-то причине поле электронной почты не отображается для Gmail с опцией без заголовка.

Таким образом, эта проблема похожа на специфику gmail c.

Так выглядит поле электронной почты в Gmail при проверке: enter image description here

Есть идеи, как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 30 августа 2020

Это потому, что в безголовом режиме chrome используется для выбора самой старой версии Gmail или версии Gmail без JS. Если вы go в настройках сайта и отключите javascript в Gmail, то при повторном посещении вы получите другую версию Gmail. Итак, chrome использовал этот xpath этой старой версии при работе в безголовом режиме, если вы хотите запустить селен в gmail, вы можете go для mozilla, он работает нормально, или же предоставить пользовательский агент браузеру во время работы во время работы chrome без головы.

0 голосов
/ 08 мая 2020

Я бы посоветовал получить исходный код страницы, когда вы запустите тест в автономном режиме. Не исключено, что в безголовом строении все может быть иначе. Кроме того, попробуйте использовать другой локатор, например // input [@ type = 'email'] - сначала убедитесь, что нет других полей ввода с типом 'email'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...