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

在获取所有链接时,忽略循环中的注销链接,并在selenium java中继续导航

帅德惠
2023-03-14

我获取页面中的所有链接,并导航到所有链接。其中一个链接是注销。如何从循环跳过/忽略注销链接?

我想跳过注销链接并继续

List demovar=driver。findElements(按.tagName(“a”));系统出来println(demovar.size());

   ArrayList<String> hrefs = new ArrayList<String>(); //List for storing all href values for 'a' tag

      for (WebElement var : demovar) {
          System.out.println(var.getText()); // used to get text present between the anchor tags
          System.out.println(var.getAttribute("href"));
          hrefs.add(var.getAttribute("href")); 
          System.out.println("*************************************");
      }

      int logoutlinkIndex = 0;

      for (WebElement linkElement : demovar) {
               if (linkElement.getText().equals("Log Out")) {
                           logoutlinkIndex = demovar.indexOf(linkElement);
                           break;
                }

      }

      demovar.remove(logoutlinkIndex);

      //Navigating to each link
      int i=0;
      for (String href : hrefs) {
          driver.navigate().to(href);
          System.out.println((++i)+": navigated to URL with href: "+href);
          Thread.sleep(5000); // To check if the navigation is happening properly.
          System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");

共有2个答案

瞿宏儒
2023-03-14

>

  • Java方法删除不感兴趣的链接使用Stream.filter()函数:

    List<String> hrefs = driver.findElements(By.className("a"))
            .stream()
            .filter(link -> link.getText().equals("Log out"))
            .map(link -> link.getAttribute("href"))
            .collect(Collectors.toList());
    

    使用XPath!=只收集文本不等于Log Out的链接的运算符解决方案:

    List<String> hrefs = driver.findElements(By.xpath("//a[text() != 'Log out']"))
            .stream()
            .map(link -> link.getAttribute("href"))
            .collect(Collectors.toList());
    

  • 公羊宗清
    2023-03-14

    如果您想从循环中删除注销链接,而不是创建列表作为驱动程序。findElements(按.tagName(“a”)) 作为替代方案,您可以使用:

    driver.findElements(By.xpath("//a[not(contains(.,'Log Out'))]"));
    

    您可以在以下网站找到一些相关讨论:

    • 量角器条件选择器
    • 如何通过Python使用Selenium定位按钮元素
    • Selenium中使用的xpath中所包含的(,“some text”)指的是什么
    • dot(.)在xpath中,在标识元素和匹配文本时采用多种形式

     类似资料:
    • 问题内容: 我正在用Python练习Selenium,我想使用Selenium获取网页上的所有链接。 例如,我想要http://psychoticelites.com/上所有标签的属性中的所有链接。 我写了一个脚本,它正在工作。但是,它给了我对象地址。我尝试使用标签来获取值,但是,它不起作用。 我当前的脚本: 问题答案: 好吧,您只需要遍历列表即可: 返回元素列表(注意“ elements”的拼写

    • 问题内容: 我正在用Python练习Selenium,我想使用Selenium获取网页上的所有链接。 例如,我想要http://psychoticelites.com/上所有标签的属性中的所有链接。 我写了一个脚本,它正在工作。但是,它给了我对象地址。我尝试使用标签来获取值,但是,它不起作用。 我当前的脚本: 问题答案: 好吧,您只需要遍历列表即可: 返回元素列表(注意“ elements”的拼写

    • 在selenium中,在python中,我必须循环使用Jira1、jira2、jira3链接 对于范围(1,4)中的i: driver.find_element(By.XPATH,"//a[text()='Jira'] /str(i)")。 它给了我一个错误NoSuchElementException:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“//a[text()='

    • 我使用以下代码滚动页面并跟踪quora上的用户(链接到页面:http://www.quora.com/Kevin-Rose/followers),向下滚动后会加载一定数量的用户,我使用的代码如下: 我得到以下错误: 消息:u'Element不再附加到DOM'; StackTrace: 编辑1:我尝试使用,但函数的输出对象显然不是可以迭代的链接列表。

    • 如果我像下面这样做一个异步调用,如何将它们与promise联系起来,这样我就可以按顺序做事了?在这个例子中,最终发生的是会将项按顺序推入。我更喜欢有promise的回答,但只要有效,什么都行

    • 我的代码不会获取这样的链接。使用doc.select也没有帮助。我的问题是,如何从页面中获得所有链接? 编辑:我想我知道问题出在哪里了。我遇到麻烦的页面写得很糟糕,HTML验证器抛出了大量的错误。这会引起问题吗?