当前位置: 首页 > 知识库问答 >
问题:

ElementNotInteractiableException:元素在Selenium中不可交互

狄雅珺
2023-03-14

我试图得到某个产品的评论,但它返回一个错误。

我的代码:

import selenium
from selenium import webdriver
chrome_path = r"C:\Users\AV\AppData\Local\Programs\Python\Python39\Scripts\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)

driver.get("https://oldnavy.gapcanada.ca/browse/product.do?pid=647076053&cid=1180630&pcid=26190&vid=1&nav=meganav%3AWomen%3ADeals%3ASale&grid=pds_0_1034_1#pdp-page-content")
driver.execute_script("window.scrollTo(0, 1000)")
import time
from time import sleep
sleep(5)
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.promoDrawer__handlebar__icon"))).click()

review = driver.find_elements_by_class_name("pr-rd-description-text")
for post in review:
    print(post.text)
    
driver.find_element_by_xpath('//*[@id="pr-review-display"]/footer/div/div/a').click()
review2 = driver.find_elements_by_class_name("pr-rd-description-text")
for post in review2:
    print(post.text)

它返回:硒。常见的例外。ElementNotInteractitableException:消息:元素不可交互

你能告诉我该怎么办吗?

共有2个答案

凌琦
2023-03-14

按钮真的很难点击。

我想这可以通过添加更多等待和使用ActionChains方法来实现。

我可以用Javascript代码点击它,没有问题。它的作用是:

1滚动到下一个按钮

点击2下。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome(executable_path='/snap/bin/chromium.chromedriver')

driver.get(
    "https://oldnavy.gapcanada.ca/browse/product.do?pid=647076053&cid=1180630&pcid=26190&vid=1&nav=meganav%3AWomen%3ADeals%3ASale&grid=pds_0_1034_1#pdp-page-content")
driver.execute_script("window.scrollTo(0, 1000)")

wait = WebDriverWait(driver, 20)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.promoDrawer__handlebar__icon"))).click()
wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".pr-rd-description-text")))
review = driver.find_elements_by_css_selector(".pr-rd-description-text")
for post in review:
    print(post.text)

# wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".pr-rd-pagination-btn"))).click()
element = driver.find_element_by_css_selector(".pr-rd-pagination-btn")

# actions = ActionChains(driver)
# actions.move_to_element(element).click().perform()
driver.execute_script("arguments[0].scrollIntoView();", element)  # Scrolls to the button
driver.execute_script("arguments[0].click();", element)  # Clicks it
print("clicked next")

我还重新整理了你的代码,将导入移到了文件的开头,摆脱了不可预测的时间。sleep()并使用了更可靠的css定位器。然而,你的定位器也应该起作用。

我留下了我尝试过的选项。

许安邦
2023-03-14

这个元素很奇怪。即使我滚动到视图中,使用操作来单击它,或者执行javascript来单击,它也不起作用。我的建议是从元素中抓取href属性,然后转到该URL,使用如下内容:

driver.get(driver.find_element_by_xpath('//*[@id="pr-review-display"]/footer/div/div/a').get_attribute('href'))
 类似资料:
  • 我是新的Selenium C#NUnit。我跟着一行代码跑了 var wait=new WebDriverWait(驱动程序,TimeSpan.FromSeconds(30));等待直至(d)= 我得到了以下消息:消息:OpenQA. Selenium。元素不可交互(会话信息:chrome=89.0.4389.114)堆栈跟踪:远程WebDriver。Unpack AndThrowOnError(

  • 我有两个输入文本 通过打印元素标题,我确认了第一个和第二个输入元素都是可访问的。到目前为止,我尝试了setAttribute,executescript……但没有一个有效(或者我做了一些错误)(也许,它可能对谷歌chrome自动更新有作用?这是我现在唯一能想到的)

  • 我试图打开stackoverflow并搜索查询,然后单击搜索按钮。除了我不能点击提交按钮外,几乎一切都很顺利 我遇到错误 未知错误:元素...在点(608,31)不可点击。其他元素将接收单击:(会话信息:chrome=60.0.3112.101)(驱动程序信息:chromeDrive=2.29.461591 (62ebf098771772160f391d75e589dc567915b233),平台

  • 我试图登录到beeradvocate.com抓取(抓取)一些啤酒数据。我试过硒,但失败了。 这是html 我尝试使用名称、值和类,但一切都失败了。我最后一次尝试Xpath,但也失败了。 网站和检查 我的代码: 我已经使按钮工作: 然而,我需要能够执行发送_键来输入id和pw来登录。。。有人知道吗?

  • 问题内容: 在下面的代码中,我无法在密码字段中发送密码密钥,我尝试单击该字段,清除该字段并发送密钥。但是现在可以使用任何一种方法。但是如果我调试和测试它的工作 问题答案: 尝试将隐式等待时间设置为大约10秒。 或设置一个明确的等待。显式等待是您定义的代码,用于等待特定条件发生后再继续执行代码。您的情况就是密码输入字段的可见性。(感谢ainlolcat的评论) 说明 :硒无法找到该元素的原因是因为密

  • 我正在尝试在使用VueJs的单页应用程序中开发一个自动化测试,当我单击注册按钮时,页面加载了一个包含元素的表单,但是由于元素根据需要加载,它们不会自动出现在那里,我可以解决在单击注册按钮后放置driver.sleep的问题,但我正在寻找一种解决方法,我尝试了InluductEts和elisEnabled,但我无法得到结果,在这里检查我的代码: const { Builder, By, Key, 直