目前我正在創建一個 python 腳本,該腳本在https://www.mwcbarcelona.com/exhibitors 上單擊并單擊每個參展商并回傳同一頁面,然后單擊下一個參展商。我寫了一段代碼:
from bs4 import BeautifulSoup
import requests
import csv
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
import os
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome("chromedriver.exe")
driver.get('https://www.mwcbarcelona.com/exhibitors')
td_list = driver.find_elements_by_css_selector("tr[class='flex px-4 cursor-pointer hover:bg-gray-100 sm:table-row sm:text-gray-700 sm:font-medium']")
for desc in td_list:
print(desc.text)
desc.click()
time.sleep(3)
driver.back()
time.sleep(3)
當我運行我的代碼時,我只能去第一個參展商,然后它給了我這個錯誤:
StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
有人可以告訴我這里出了什么問題。
uj5u.com熱心網友回復:
wait=WebDriverWait(driver,10)
driver.get("https://www.mwcbarcelona.com/exhibitors")
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#onetrust-accept-btn-handler"))).click()
i=1
while True:
try:
elem=wait.until(EC.element_to_be_clickable((By.XPATH,f"(//tr[@class='flex px-4 cursor-pointer hover:bg-gray-100 sm:table-row sm:text-gray-700 sm:font-medium'])[{i}]")))
driver.execute_script("arguments[0].click();", elem)
driver.back()
i =1
except Exception as e:
print(str(e))
break
當您離開頁面時,您將丟失所有舊元素。如果它是一個標簽,你可以收集hrefs,否則你需要跟蹤索引。此外,似乎 img 是獲得點擊的那個,因此您可以根據需要進行處理。
進口:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
uj5u.com熱心網友回復:
由于執行的操作(導航),似乎 td_list 在 for 回圈內變得不可訪問。DOM 正在發生變化,這就是您收到過時元素參考例外的原因。在 for 回圈中初始化元素“td_list”。
您還可以使用顯式等待條件來等待元素可用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/401178.html
