python - 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 特有的。
关于如何克服这个问题的任何想法?
解决方案
我建议您在无头模式下运行测试时获取页面源代码。有可能,在无头结构中可能会有所不同。此外,请尝试使用不同的定位器,例如 //input[@type='email'] - 首先确保没有其他类型为“email”的输入。
推荐阅读
- google-sheets - 合并列而不删除或影响行
- spring-boot - 在 Spring Boot 测试中使用 UriComponentsBuilder/MvcComponentsBuilder
- html - 使用 nth-of-type 对齐图像
- flutter - 检查 SQFLITE 数据库中存在 PK 列表中的哪些 PK
- windows - Meshlabserver 错误:在命令行中编辑网格时无法保存
- c# - 发送到复制的 Socket
- sql - SQL: Count (*) WHERE 需要多个匹配项
- java - 如何根据条件进行正则表达式匹配?
- javascript - 我想用 HTML Get 更改 iframe 源
- python - 要求用户在 python 中使用 for 循环提供数据