【问题标题】:Find and Click on each link on a web page using C# and Selenium使用 C# 和 Selenium 查找并单击网页上的每个链接
【发布时间】:2021-02-08 00:23:10
【问题描述】:

我正在尝试浏览网页中的 ahref 链接列表,然后一次单击每个链接。 我设法列出所有链接并使用 GetAttribute 方法显示它们,但我很难点击每个链接。任何使用硒的 C# 中的建议或类似示例将不胜感激?

我需要这样做的原因是尝试检查所有链接是否都可以点击并且不返回页面未找到错误

提前致谢

List<IWebElement> item = new List<IWebElement>();
foreach (IWebElement item in OpenPageSteps.driver1.FindElements(By.TagName("a")))
{
if (item.Displayed)
{
Console.WriteLine(item.GetAttribute("href"));
}
}`

【问题讨论】:

    标签: c# selenium webdriver


    【解决方案1】:

    您的目标是检查链接是否正常工作并且它不会返回页面未找到错误。没有 selenium 的一种简单方法是我们可以使用 .NET 和 C# 中的 WebRequest 和 WebResponse 类来调用链接并读取其内容。

    public void callurl(string url)  
    {  
    WebRequest request = HttpWebRequest.Create(url);  
    WebResponse response = request.GetResponse();  
    StreamReader reader = new 
    StreamReader(response.GetResponseStream());  
    string urlText = reader.ReadToEnd(); // it takes the 
    response from your url. now you can use as your need  
    Response.Write(urlText.ToString());  
    }
    

    在循环内调用该函数,检查是否返回页面内容。

    【讨论】:

    • 第一步应该是检索页面并解析它以获取“a”标签及其 href 属性——也可以绕过浏览器完成。解析请求结果可以使用HtmlAgility库html-agility-pack.net
    【解决方案2】:

    Selenium 不是检查链接是否存在 404 错误的最佳工具。您可以使用 Selenium 收集链接,然后只需使用 HttpClient 来检查它们。效率会高很多。

    var client = new HttpClient();
    try
    {
        var response = await client.GetAsync(url);
    
        if (response.IsSuccessStatusCode)
        {
            // normal link
        }
        else
        {
            // Something wrong with link here (500 etc)
        }
    }
    catch (Exception e)
    {
        // .. Network related issues (site does not exist etc.)
    }
    

    【讨论】:

    • 谢谢,但我需要做的第一件事是浏览 ahref 链接列表。网页上有很多链接,所以我首先需要遍历每个链接并首先检查它们是否存在。为了实现这一点,我使用 driver1.FindElements(By.TagName("a"))) 但我需要遍历所有链接并首先单击每个链接
    • 使用 Selenium,您一次只能单击一个链接,然后您的 Selenium 将加载该链接。所以你需要创建类似爬虫的东西。你为什么决定使用 Selenium?
    • 我正在研究 selenium。可以使用 FindElements 浏览所有链接并单击它们。 ReadOnlyCollection 链接 = driver.FindElements(By.TagName("a")); foreach(链接中的 IWebElement 链接){ String href = link.GetAttribute("href"); // 用 href 做一些事情 }
    • Selenium 是浏览器自动化框架。如果您单击网页上的所有链接,您期望得到什么结果?你不会得到任何有意义的结果。所以你需要存储你找到的链接,然后一一导航
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    相关资源
    最近更新 更多