【问题标题】:Message: stale element reference: element is not attached to the page document after returning a page消息:过时的元素引用:返回页面后元素未附加到页面文档
【发布时间】:2021-12-31 10:51:21
【问题描述】:

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

谁能告诉我这里出了什么问题。

【问题讨论】:

  • 不确定是什么原因造成的,但动态网页也有同样的问题。我建议为“desc.click()”生成的 url 打开一个新的 Chrome 实例
  • @YannisP。你能提供一些信息吗?
  • 您从网页获取的tr 元素应该在某处有a 元素。获取这些 a 的 href 并在每个处打开一个新的 webdriver.Chrome。然后做一些工作(点击后我看不到你需要做什么)并关闭新驱动程序
  • @YannisP。没有“a”标签。我提供了你的链接。

标签: python selenium selenium-webdriver web-scraping


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 2018-10-23
    • 2021-12-19
    • 2019-09-30
    • 2022-08-17
    • 2019-02-03
    • 2022-01-21
    • 2021-05-10
    • 2020-11-13
    • 1970-01-01
    相关资源
    最近更新 更多