如何解决元素在Selenium Chrome无头模式下不可交互
当我没有在无头模式下运行chrome时,我的代码可以正常工作,但是在无头模式下,我看到“元素不可交互”。
我在email_box.send_keys('')上遇到错误
我已经设置了窗口大小,但仍然无法正常工作
代码:
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')
解决方法
如果有人想要另一种解决方案,我也找到了这个。出于某种原因,当窗口未最大化时,您可能无法点击元素:
在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
,
如果您尝试调试和打印“ email_box”的externalHTML,则它正在寻找不可交互的元素
更具体/独特于您的定位器。您可以使用// 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')
,
所以我尝试了所有建议的解决方案,但没有任何效果。就我而言,我正在使用 AngularJS 抓取 SPA。我找到的解决方案是 webdriver 的以下选项设置:
options.add_argument("--window-size=1920,1080")
然后等待你想要点击的元素可以点击,就像之前显示的一样:
elem = WebDriverWait(driver,'somexpath')))
我尝试以两种方式最大化窗口,即从选项以及直接从驱动程序实例。但两种方式都不适合我。
这是我找到解决方案的 Github 问题页面的链接:https://github.com/angular/protractor/issues/5273
干杯
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。