[英]Message: element not interactable in Python Selenium
我想單擊加載更多按鈕以顯示所有 347 產品,但是它返回消息:元素不可交互,知道如何修復它嗎?
from selenium import webdriver
driver=webdriver.Chrome('e:/Users/fungc1/Documents/chromedriver.exe')
from selenium.webdriver.chrome.options import Options
import time
from selenium.webdriver.common.action_chains import ActionChains
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
options=Options()
url= "https://www.toysrus.com.sg/lego"
driver.get(url)
while True:
try:
btn = driver.find_element_by_xpath("//*[name()='use' and @*='#chevron-circle-thin']")
btn.click()
except Exception as e:
print(e)
break
問題是您需要滾動到頁面末尾才能讓 selenium 知道視點中的按鈕在哪里。
代碼:
driver.get("https://www.toysrus.com.sg/lego/")
sleep(5)
driver.execute_script("var scrollingElement = (document.scrollingElement || document.body);scrollingElement.scrollTop = scrollingElement.scrollHeight;")
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn[data-url*='www.toysrus.com']"))).click()
print("Clicked on ")
更新1:
driver = webdriver.Chrome("C:\\Users\\***\\Desktop\\Selenium+Python\\chromedriver.exe")
driver.maximize_window()
wait = WebDriverWait(driver, 30)
driver.get("https://www.toysrus.com.sg/lego/")
while True:
try:
sleep(5)
driver.execute_script("var scrollingElement = (document.scrollingElement || document.body);scrollingElement.scrollTop = scrollingElement.scrollHeight;")
sleep(5)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn[data-url*='www.toysrus.com']"))).click()
print("Clicked on ")
except Exception as e:
print(e)
wait=WebDriverWait(driver, 10)
url= "https://www.toysrus.com.sg/lego"
driver.get(url)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,".affirm.btn.btn-outline-secondary"))).click()
while True:
try:
wait.until(EC.element_to_be_clickable((By.XPATH,"//div[@class='show-more']/button"))).click()
time.sleep(5)
except Exception as e:
print(e)
break
您應該替換 time.sleep() 以獲得微調器的可見性。 但只需等待元素加載。
allProducts=driver.find_elements_by_xpath("//div[@class='product-grid-wrapper']//div[@class='card product-tile product']")
print(len(allProducts))
打印 346?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.