python - 我的脚本在单击链接时遇到错误
问题描述
我在 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()
解决方案
这有效
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;
推荐阅读
- android - 我应该实现哪个库来使用 app:layout_behavior="@string/appbar_scrolling_view_behavior"
- android - 如何在 cavas 上绘制许多位图
- java - 如何模拟方法返回类型,如果它使用 CompletableFuture 异步调用
- python - ValueError:在 url 配置中解压的值太多(预期为 3)
- c# - 使用 SSL 通过 .Net DirectoryServices 连接到 LDAP
- php - 如何在laravel eloquent中只获得活跃的关系
- python - 重新插入一个 DataFrame,使其与另一个(非常相关的)DataFrame 对齐
- javascript - 在谷歌验证框中使用 Javascript 触发事件不起作用
- microsoft-dynamics - AX 2012 r3 中存储表错误和警告的位置
- javascript - 使用自定义 javascript 函数提交表单时如何更新自动完成/自动填充?