消息:过时的元素引用:返回页面后,元素未附加到页面文档



目前我正在创建一个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

有人能告诉我这里出了什么问题吗。

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

当你离开一个页面时,你会丢失所有的旧元素。如果它是一个标签,你可以收集href,否则你需要跟踪索引。而且img似乎是一个得到点击的人,所以你可以随心所欲地处理它。

进口:

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

最新更新