【问题标题】:Python: Selenium - Message: element not interactablePython:Selenium - 消息:元素不可交互
【发布时间】:2023-03-28 23:48:01
【问题描述】:
新手试图弄清楚事情。我四处寻找答案,但没有找到。
在尝试与网页交互时,我从 Python 收到此消息:
元素不可交互
这是我的代码:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://www.annemcgilvray.com")
search = driver.find_element_by_name("q")
search.send_keys("test")
我尝试过等待和隐式等待。我不认为它在 iframe 中,尽管页面上有 iframe。
任何帮助将不胜感激!
【问题讨论】:
标签:
python
selenium-webdriver
webdriverwait
【解决方案1】:
您需要添加等待/延迟以让元素在访问之前完全加载。
最好的方法是使用由预期条件实现的显式等待,如下所示:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
wait = WebDriverWait(driver, 20)
driver.get("https://www.annemcgilvray.com")
search = wait.until(EC.visibility_of_element_located((By.NAME, "q")))
search.send_keys("test")
【解决方案2】:
当我尝试您的代码时,问题是该网站没有调整到我的浏览器窗口的大小并且搜索字段不在视野中,因此无法与之交互,尽管 selenium 可以找到它。
我尝试使用execute_script 将其滚动到视图中,然后,send_keys 起作用了。
from selenium import webdriver
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://www.annemcgilvray.com")
search = wait.until(EC.visibility_of_element_located((By.NAME, "q")))
driver.execute_script(f"window.scrollBy({search.location['x']},0)")
search.send_keys("test")