[英]Using selenium webdriver, how to click on multiple random links in webpage one after another continuously to detect broken links?
我正在尝试编写一个测试脚本,该脚本本质上将在登录后在网页中随机测试所有可见链接,而不是显式指定它们。 在Selenium IDE / Webdriver中可以做到这一点吗?如果可以,我该怎么做?
links = driver.find_element_by_tag_name("a")
list = links[randint(0, len(links)-1)]
上面的代码将获取首页中的所有链接,但是如何在不为每个链接/页面手动添加以上代码的情况下测试所有或尽可能多的链接呢? 我想我要做的是找到会导致500/404断开的链接 。 有什么有效的方法吗? 谢谢。
当前,您无法从硒合法获取状态代码。 您可以使用selenium来爬网url,并使用其他库(例如请求)来检查链接状态,例如这样(或使用@MrTi建议的带有标题检查的解决方案):
import requests
def find_broken_links(root, driver):
visited = set()
broken = set()
# Use queue for BFS, list / stack for DFS.
elements = [root]
session = requests.session()
while len(elements):
el = elements.pop()
if el in visited:
continue
visited.add(el)
resp = session.get(el)
if resp.status_code in [500, 404]:
broken.add(el)
continue
driver.get(el)
links = driver.find_element_by_tag_name("a")
for link in links:
elements.append(link.get_attribute('href'))
return broken
测试不良页面时,通常会测试标题/ URL。 如果要测试一个自包含网站,则应查找/创建一个错误的链接,并查看标题/ URL中的唯一内容,然后执行以下操作:
assert(!driver.getTitle().contains("500 Error"));
如果您不知道标题/ URL的外观,可以检查标题是否包含“ 500” /“ 404” /“错误” /“找不到页面”,或者页面源中是否也包含这些内容。
这可能会导致一堆不好的页面,而这些页面实际上并不是很糟糕(尤其是如果您检查页面源代码),并且需要您仔细检查每个页面,并验证它们是否真的很糟糕。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.