【问题标题】:Python Selenium Web Driver: send_keys does not work in headless modePython Selenium Web 驱动程序:send_keys 在无头模式下不起作用
【发布时间】:2020-11-30 17:37:23
【问题描述】:

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

我的终端从不打印“已输入电子邮件”

【问题讨论】:

  • 输入字段的 xPath 怎么样。这是正确的吗 ?如果 xpath 正确,您可以简单地使用输入文本。 driver.find_element_by_xpath('//input[@id="identifierId"]').send_keys(emailUser')

标签: python selenium google-chrome webdriver headless


【解决方案1】:

在选项中尝试添加这个参数

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 时,请使用以下 sn-p 更新您的代码:

username = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#identifierId")))
username.send_keys("Emailuser", Keys.ENTER)

【讨论】:

    猜你喜欢
    • 2023-02-10
    • 2022-11-21
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多