首页 > 解决方案 > 我的脚本在单击链接时遇到错误

问题描述

我在 python 中编写了一个与 selenium 相关的脚本,以启动对连接到网页中每个配置文件的某些链接的点击。我的脚本对第一个链接做得很好。由于没有有效的链接(它们都是 javascript 链接)连接到每个配置文件,我不得不点击。但是,当它应该点击下一个链接等等时,它会抛出一个错误stale element reference: element is not attached to the page document。如果不是单击,我可以轻松导航到每个配置文件,而不会按照我在脚本中应用的逻辑出现该错误。如果循环单击链接,我找不到任何继续前进的想法。

我现在可以做些什么来摆脱该错误并单击所有链接?

这是我的尝试:

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

def search_links(driver,link):
    driver.get(link)
    items = [item for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#main table tr a"))) if "#" not in item.get_attribute("href")]
    for item in items:
        item.click() #The error is thrown here as soon as the script goes for the second click
        wait.until(EC.staleness_of(item))

if __name__ == '__main__':
    url = "https://intraweb.stockton.edu/eyos/page.cfm?siteID=58&pageID=7&action=dirmain&type=FAC&display=basic"
    driver = webdriver.Chrome()
    wait = WebDriverWait(driver, 10)
    try:
        search_links(driver,url)
    finally:
        driver.quit()

标签: pythonpython-3.xseleniumselenium-webdriverweb-scraping

解决方案


这有效

def search_links(driver,link):
driver.get(link)
items = [item for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#main table tr a"))) if "#" not in item.get_attribute("href")]
for i in range(0, len(items)):
    items = driver.find_elements_by_css_selector("#main table tr a")
    items[i].click()
    driver.find_element_by_link_text("back to directory").click()
    i = i+1;

推荐阅读