Python Selenium Web驱动程序:send_keys在无头模式下不起作用

问题描述

有没有办法以无头模式登录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)