繁体   English   中英

使用Selenium WebDriver,如何连续不断地单击网页中的多个随机链接以检测损坏的链接?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM