当前位置: 首页 > 知识库问答 >
问题:

如何使用Selenium浏览网页链接并再次返回?

杨波娃
2023-03-14

我试图找到一个网页上的所有超链接,链接文本也在列表中,页脚名称。我想点击链接,等待(稍后会放入验证检查),导航回来,然后点击allLinksHrefs列表中的下一个链接(其中应该包含所有必要的网页链接元素)。目前,我能够找到第一个链接,单击它,导航回来,但随后测试失败。我使用硒WebDriver与C#。提前感谢。

    public void TestFooterPageLinks()
    {
        List<IWebElement> allLinksHrefs = new List<IWebElement>();
        List<String> allLinksText = new List<String>();
        String currentUrl = Browser.Url;

        List<String> footerNames = new List<String>();
        footerNames.Add("About");
        footerNames.Add("Press");
        footerNames.Add("Safety");
        footerNames.Add("Privacy");
        footerNames.Add("Help");
        footerNames.Add("Terms");
        foreach (IWebElement link in Browser.FindElements(By.TagName("a")))
        {
            if (footerNames.Contains(link.Text))
            {
                if (allLinksHrefs.Contains(link)) {
                    continue;
                }
                else {
                    allLinksHrefs.Add(link);
                    Console.WriteLine(link);
                }
            }
        }
        foreach (IWebElement pageLink in allLinksHrefs)
        {
            Console.WriteLine(pageLink);
            pageLink.Click();
            Console.WriteLine(Browser.Title);
            Browser.Wait(3);
            Browser.Back();
        }
    }
}

共有2个答案

戚同
2023-03-14

以下是我可能实现这一目标的方法:

List<WebElement> links = driver.findElements(By.cssSelector('a'));

以上是你每一天的收获

然后我可以看到两种不同的方法,我将概述一个简单的例子。

Iterator<WebElement> iter = links.iterator();

设置迭代器对象

while (iter.hasNext()) {
    WebElement we = iter.next();
    visitPage(we);
}

然后有支持访问页面功能

public void visitPage(WebElement link) {
    try {
        link.click()
        Console.WriteLine("Visited Page: " + driver.getTitle() + " at url: " + link.text()); //for page title
    } catch (Exception e) {
        //do something clever with error handling
        e.printStackTrace();
    } 
    // navigate back
    driver.manage.navigate.back();  //go back to previous page (maybe don't even care about this)
}
  • 这是未经测试的
段铭晨
2023-03-14

以这种方式尝试它解决了你的问题”在导航回来后,以前找到的元素将过期。因此,我们需要更新代码,以便在导航返回后重新查找元素”

driver.navigate().to("http://www.example.com/");
List<WebElement> links = driver.findElements(By.tagName("a"));
System.out.println(links.size());
for(int i=0; i<links.size(); i++) {
    // Print the link text
    System.out.println(links.get(i).getText());
    // Print the href's
    System.out.println(links.get(i).getAttribute("href"));
    links.get(i).click();
    System.out.println(driver.getTitle());
    System.out.println(driver.getCurrentUrl());
    driver.navigate().back();
    /* after navigating back the elements found previously will be expired. 
       Hence we need to update the code to refind the elements after navigate back.
       so again we write the links = driver.findElements(By.tagName("a")); */
    links = driver.findElements(By.tagName("a"));
}
 类似资料:
  • 我在处理包含javascript链接的页面时遇到了麻烦。问题是页面包含的城市列表中有javascript在他们的链接。现在我必须一个接一个地导航到每个链接,抓取一些信息,然后回到列表,移动到下一个城市,继续抓取。 问题是在使用selenium web驱动程序点击javascript链接后,当我导航回列表页面时,响应丢失,我得到错误如下: 有办法吗?

  • 问题内容: 是否可以使用selenium浏览给定URL(网站)的所有URI ? 我的目标是使用具有给定选择的URL的selenium来启动firefox浏览器(由于有了此网站,我知道该怎么做),然后让firefox浏览URL(该网站)拥有的所有页面。我感谢有关如何在Python中进行操作的任何提示/帮助。 问题答案: 您可以在类中使用递归方法,例如下面给出的方法。 希望这对您有所帮助。

  • 我正在使用selenium使用chrome浏览器来自动化网页,但是chrome浏览器没有启动,它在地址栏中显示“数据:;”而没有加载任何页面。 selenium: selenium-服务器-独立-3.0.0-beta2,也尝试了2.53 Chrome驱动程序:2.23(http://chromedriver.storage.googleapis.com/index.html?path=2.23/)

  • 我正试图从一个通过“下一步”按钮链接了多个页面的站点中获取数据 后续页面URL与上一页面URL没有对应关系 (在这种情况下,修改路径可以解决问题) 这就是我打算做的- 1.从初始URL开始 2.提取信息 3.点击NEXT 重复2次和3次 具体来说,我想知道如何在单击时获取新页面URL 这是我到目前为止想出来的 任何帮助都将不胜感激

  • 我目前一直在使用超链接类型浏览Javafx中的网站。 我需要创建一个具有指定名称的超链接类型。当我单击链接时,应该会弹出一个网站。 我的代码是: ... ... 上面的代码正确地显示了一个带有文本的超链接。它是可点击的,但什么都不会发生。为了浏览网站,我能做些什么?

  • 问题内容: 如何防止使用JavaScript浏览网页? 问题答案: 使用可以显示消息,但不会中断导航(因为为时已晚)。但是,使用会中断导航: 注意:返回空字符串,因为较新的浏览器提供了诸如“任何未保存的更改将丢失的信息”之类的消息,这些消息不能被覆盖。 在较旧的浏览器中,您可以指定要在提示中显示的消息: