ElementNotInteractableException:消息:尝试使用Selenium和Python单击元素时无法将元素滚动到视图中

问题描述 投票:0回答:3

我有这个代码:

driver.switch_to.window(window_after)

try:
    myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.NAME, '_eventId_confirmed')))
    print ("Page 2 is ready!")
except TimeoutException:
    print ("Loading took too much time!")

btn = driver.find_element_by_name('_eventId_confirmed')

btn.click()

你可以看到我先切换窗口,然后检查一个元素,获取该元素(一个按钮),最后尝试点击所述按钮。这可能是3次中的2次,但是经常会因此错误消息而失败

selenium.common.exceptions.ElementNotInteractableException: Message: Element <button class="btn" name="_eventId_confirmed"> could not be scrolled into view

当它在执行时直观地查看流程一切似乎都很好(我的第一个猜测是窗口开关没有按预期工作)并且浏览器最终处于预期状态,我可以手动单击此按钮。有趣的是,当发生此错误时,没有超时或类似情况,它会在执行期间立即发生。

有什么想法在这里发生了什么?

python selenium selenium-webdriver webdriver webdriverwait
3个回答
1
投票

当您尝试单击的元素出现在页面上但它不完全可见并且selenium尝试单击的点不可见时,通常会出现此问题。 在这种情况下,您可以使用javascript单击该元素,该元素实际上直接在页面的html结构上运行。 您可以像以下一样使用它:

element = driver.find_element_by_name("_eventId_confirmed")
driver.execute_script("arguments[0].click();", element)

0
投票

以下是2个选项。

使用硒location_once_scrolled_into_view方法:

btn.location_once_scrolled_into_view

使用Javascript:

driver.execute_script("arguments[0].scrollIntoView();",btn)

示例代码:

url = "https://stackoverflow.com/questions/55228646/python-selenium-cant-sometimes-scroll-element-into-view/55228932?    noredirect=1#comment97192621_55228932"
driver.get(url)
element = driver.find_element_by_xpath("//a[.='Contact Us']")
element.location_once_scrolled_into_view
time.sleep(1)
driver.find_element_by_xpath("//p[.='active']").location_once_scrolled_into_view
driver.execute_script("arguments[0].scrollIntoView();",element)

0
投票

因为你的最后一步是在所需的元素上调用click(),所以不需要使用expected_conditions作为presence_of_element_located(),你需要使用element_to_be_clickable()如下:

try:
    myElem = WebDriverWait(driver, delay).until(EC.element_to_be_clickable((By.NAME, '_eventId_confirmed')))
© www.soinside.com 2019 - 2024. All rights reserved.