我用python与硒关联编写了一个脚本,以启动对与网页中每个个人资料相关的某些链接的点击。我的脚本在第一个链接方面做得很好。由于没有有效的链接(所有链接都是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()
答案 0 :(得分:1)
这有效
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;
答案 1 :(得分:0)
要迭代的项目列表包含WebElement。 click()
一经触发,就会触发导航,使所有原始WebElement都失效(因为您已经离开了它们所附加的DOM)。
作为一种解决方法,您可以从元素中获取所有href网址,然后使用它们。由于它们不包含状态,因此您在哪个页面上都没有关系。因此,除了点击之外,您还可以执行以下操作:
elements = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#main table tr a")))
hrefs = [item.get_attribute("href") for item in elements if "#" not in item.get_attribute("href")]
for href in hrefs:
driver.get(href)