当我不在无头模式下运行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
要将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。我发现的解决方案是为网络驱动程序设置以下选项:
options.add_argument("--window-size=1920,1080")
之后,只需等待您想要点击的元素即可点击,如前所示:
elem = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, 'somexpath')))
我尝试通过两种方式最大化窗口,即从选项以及直接从驱动程序实例。但这两种方式对我都不起作用。
以下是我找到解决方案的Github问题页面的链接:https://github.com/angular/protractor/issues/5273
干杯
如果您尝试调试并打印"email_box";,它正在寻找一个不可交互的元素,即
使用定位器更加具体/独特。您可以使用//输入[@type="电子邮件"]作为电子邮件字段
我也遇到了同样的问题。我只需将代码放入try-catch中就可以解决它。示例:
enter code here
public void createrSiniestro((引发InterruptedException{
try {
WebElement crear=wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("SiniestrosListForm:datalist:crearButton")));
crear.click();
}
catch(Exception e) {
System.out.println("Options not available");
}
}