【问题标题】:ElementNotInteractableException: element not interactable in SeleniumElementNotInteractableException:元素在 Selenium 中不可交互
【发布时间】:2021-08-21 02:10:09
【问题描述】:

我正在尝试获取某个产品的评论,但它返回错误。

我的代码:

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)

它返回:selenium.common.exceptions.ElementNotInteractableException:消息:元素不可交互

你能告诉我该怎么做吗?

【问题讨论】:

    标签: python selenium selenium-webdriver web-scraping selenium-chromedriver


    【解决方案1】:

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

    driver.get(driver.find_element_by_xpath('//*[@id="pr-review-display"]/footer/div/div/a').get_attribute('href'))
    

    【讨论】:

      【解决方案2】:

      这个按钮真的很难点击。

      我想这可以通过添加更多等待并使用 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")
      

      我还重新排列了您的代码,将导入移至文件开头,摆脱了不可预测的 time.sleep() 并使用了更可靠的 css 定位器。但是,您的定位器也应该可以工作。

      我把我尝试过的选项注释掉了。

      【讨论】:

      • 很奇怪。它对我不起作用,如果我尝试 element.click(),我仍然会收到 element not interactable 错误,并且运行您的代码实际上并没有点击按钮。
      • @C.Peck 您在运行我的代码时是否看到任何错误?我只是再次检查了三遍,然后单击了按钮。检查分页即可验证。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 2020-03-08
      • 2021-12-16
      • 2021-04-22
      • 1970-01-01
      相关资源
      最近更新 更多