问题描述
有没有办法以无头模式登录Gmail帐户? send_keys在正常模式下可以使用,但是在使用无头模式时不能使用。
这是我的代码:
chrome_options = Options()
chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--proxy-server='direct://'")
chrome_options.add_argument("--proxy-bypass-list=*")
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--ignore-certificate-errors')
driver = webdriver.Chrome('./chromedriver',options=chrome_options)
driver.get("https://www.google.com/")
driver.find_element_by_xpath('//A[@id="gb_70"]').click()
time.sleep(5)
driver.get_screenshot_as_file('main-page.png')
x = True
while True:
try:
print('trying to paste email')
driver.find_element_by_xpath('//INPUT[@id="identifierId"]').send_keys(keys['emailUser'])
print('email entered')
break
except ElementNotInteractableException:
pass
except StaleElementReferenceException:
pass
except NoSuchElementException:
pass
我的终端从不打印“输入的电子邮件”
解决方法
在选项中尝试添加此参数
chrome_options.add_argument("user-agent = my-user-agent")
my-user-agent
对于每个系统都是不同的,请检查您的代理商Google my user agent
并将其插入选项中。
与此同时,我觉得在您的代码中,while
是不必要的,您可以删除它。
由于您尝试访问的文本框需要花费一些时间才能加载,因此请在提取文本框时尝试在此处使用显式等待
WebDriverWait(driver,20).until(EC.presence_of_element_located((By.CSS_SELECTOR,"#identifierId")))
当您必须输入文本并按Enter时,请使用以下代码段更新代码:
username = WebDriverWait(driver,"#identifierId")))
username.send_keys("Emailuser",Keys.ENTER)