我正在尝试使用selenium webdriver登录gmail。
以下代码在没有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')在您将此问题标记为重复之前(我知道还有许多其他类似的问题,但这些问题都对我没有帮助):
我想提一下,这适用于其他网站,例如,我可以去facebook和登录与headless选项。但由于某种原因,电子邮件字段对于带有headless选项的gmail是不可见的。
因此,这个问题看起来像是gmail特有的。
这是gmail上的电子邮件字段在被检查时的样子:

对如何克服这个问题有什么想法吗?
发布于 2020-05-08 20:55:55
我建议你在无头模式下运行测试时获取页面源代码。这是可能的,在无头结构可以是不同的。此外,请尝试使用不同的定位器,例如//input@ type ='email‘-首先确保没有其他类型为'email’的输入。
发布于 2020-08-30 19:27:01
这是因为在无头模式下,chrome会选择最旧的gmail版本或不支持JS的gmail版本。如果你转到站点设置并禁用gmail的javascript,那么你会在重新访问时得到另一个版本的gmail。所以在无头模式下运行时,所使用chrome具有旧版本的xpath。如果您想在gmail中运行selenium,可以使用mozilla,它工作得很好,或者在chrome headless中运行时为浏览器提供用户代理。
https://stackoverflow.com/questions/61676406
复制相似问题