元素在 Selenium Chrome 无头模式下不可交互
Element not interactable in Selenium Chrome Headless Mode
当我在无头模式下不 运行 chrome 时,我的代码工作正常,但在无头模式下我得到 'Element not interactable'.
我在 email_box.send_keys('')
处遇到错误
而且我已经设置了 window 大小,但仍然不起作用
代码:
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import time
options = Options()
options.add_argument('headless')
options.add_argument('window-size=1366x768')
with Chrome(options=options) as driver:
driver.get('https://accounts.google.com/login')
WebDriverWait(driver, 20).until(lambda d: d.find_element(By.TAG_NAME, 'input'))
time.sleep(2)
email_box = driver.find_element(By.TAG_NAME, 'input')
time.sleep(2)
email_box.send_keys('example@gmail.com')
如果您尝试调试和打印“email_box”的 outerHTML,它正在寻找不可交互的元素,即
更 specific/unique 使用您的定位器。您可以使用 //input[@type="email"] 作为电子邮件字段
要将 gmail 发送到输入标签,请执行以下操作。
from selenium.webdriver.support import expected_conditions as EC
email_box=WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//input[@type='email']")))
driver.implicitly_wait(2)
email_box.send_keys('example@gmail.com')
如果有人想要另一种解决方案,我也找到了这个。由于某些原因,当 window 未最大化时,您可能无法单击元素:
在Python环境下给chromedriver添加如下参数
from selenium.webdriver.chrome.options import Options
def get_options():
chrome_options = Options()
chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument("--headless")
return chrome_options
所以我尝试了所有建议的解决方案,但没有任何效果。就我而言,我正在使用 AngularJS 抓取 SPA。我找到的解决方案是网络驱动程序的以下选项设置:
options.add_argument("--window-size=1920,1080")
然后等待您要单击的元素变得可单击,如前所示:
elem = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, 'somexpath')))
我尝试最大化 window 两种方式,即从选项以及直接从驱动程序实例。但是这两种方式都不适合我。
这是 link 到 Github 问题页面,我在其中找到了解决方案:https://github.com/angular/protractor/issues/5273
干杯
当我在无头模式下不 运行 chrome 时,我的代码工作正常,但在无头模式下我得到 'Element not interactable'.
我在 email_box.send_keys('')
处遇到错误而且我已经设置了 window 大小,但仍然不起作用
代码:
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import time
options = Options()
options.add_argument('headless')
options.add_argument('window-size=1366x768')
with Chrome(options=options) as driver:
driver.get('https://accounts.google.com/login')
WebDriverWait(driver, 20).until(lambda d: d.find_element(By.TAG_NAME, 'input'))
time.sleep(2)
email_box = driver.find_element(By.TAG_NAME, 'input')
time.sleep(2)
email_box.send_keys('example@gmail.com')
如果您尝试调试和打印“email_box”的 outerHTML,它正在寻找不可交互的元素,即
更 specific/unique 使用您的定位器。您可以使用 //input[@type="email"] 作为电子邮件字段
要将 gmail 发送到输入标签,请执行以下操作。
from selenium.webdriver.support import expected_conditions as EC
email_box=WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//input[@type='email']")))
driver.implicitly_wait(2)
email_box.send_keys('example@gmail.com')
如果有人想要另一种解决方案,我也找到了这个。由于某些原因,当 window 未最大化时,您可能无法单击元素:
在Python环境下给chromedriver添加如下参数
from selenium.webdriver.chrome.options import Options
def get_options():
chrome_options = Options()
chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument("--headless")
return chrome_options
所以我尝试了所有建议的解决方案,但没有任何效果。就我而言,我正在使用 AngularJS 抓取 SPA。我找到的解决方案是网络驱动程序的以下选项设置:
options.add_argument("--window-size=1920,1080")
然后等待您要单击的元素变得可单击,如前所示:
elem = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, 'somexpath')))
我尝试最大化 window 两种方式,即从选项以及直接从驱动程序实例。但是这两种方式都不适合我。
这是 link 到 Github 问题页面,我在其中找到了解决方案:https://github.com/angular/protractor/issues/5273
干杯