首页 > 解决方案 > Chrome 驱动程序无法在无头模式下检测 gmail 上的电子邮件字段

问题描述

我正在尝试使用 selenium webdriver 登录 gmail。

以下代码在没有无头选项的情况下工作,我可以成功登录:

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')

在将此问题标记为重复之前(我知道还有许多其他类似的问题,但没有一个对我有帮助):

我想提一下,这适用于其他网站,例如我可以去 facebook 并使用无头选项登录。但看起来由于某种原因,电子邮件字段对于带有无头选项的 gmail 不可见。

因此,这个问题感觉像是 gmail 特有的。

这是检查时 gmail 上的电子邮件字段的样子: 在此处输入图像描述

关于如何克服这个问题的任何想法?

标签: pythonseleniumwebdriverselenium-chromedriver

解决方案


我建议您在无头模式下运行测试时获取页面源代码。有可能,在无头结构中可能会有所不同。此外,请尝试使用不同的定位器,例如 //input[@type='email'] - 首先确保没有其他类型为“email”的输入。


推荐阅读