【问题标题】:Strange nav element code not visibile in the page source页面源中不可见的奇怪导航元素代码
【发布时间】:2018-10-01 09:07:00
【问题描述】:

您好,我正在尝试收集此页面中的所有链接:https://www.biblico.it/index.html 使用 selenium 和 jsoup。 我的问题是我无法收集导航菜单中的链接。 例如 <a href="authorities.html">Authorities</a><a href="#">Who we are</a> 不存在于页面源中,但我可以使用 chromium 中的“检查元素”方法查看它们的代码。

我知道它们是以某种奇怪的方式动态生成的,但我不知道如何收集它们。有人可以帮帮我吗?

【问题讨论】:

    标签: javascript php html google-chrome nav


    【解决方案1】:

    昨天我和一个朋友也遇到了这个问题。他安装了一个 chrome 扩展,允许您查看相对 Xml 路径和页面上给定元素的绝对路径。然后你可以使用 selenium 通过 xpath 找到它。

    抱歉,如果缺少更多信息,但这应该足以让您找到某个地方。

    【讨论】:

    • 你能解释一下吗,我已经下载了 XPath Helper 扩展,它给了我这个“xpath”pastebin.com/UcpEWXmu 链接Authorities .我使用 driver.findElementByXPath(String xpath) 来查找元素并显示其文本,但它不起作用 D:
    • 顺便说一句,您建议的方法仅适用于页面源中实际存在的元素。它不仅适用于导航内的元素。
    【解决方案2】:

    问题是 Jsoup 无法处理由某些脚本动态生成的元素,并且动态生成的元素永远不会在任何浏览器中使用“查看页面源”选项显示。另一方面,chrome 中的“检查元素”功能可以动态显示这些生成元素的代码。我发现 WebElement.GetAttribute() 方法实际上就像 chrome 中的“检查元素”功能一样,它解决了我的问题。 所以抓取https://www.biblico.it/index.html中所有链接的java代码是:

    System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver");
            WebDriver driver = new ChromeDriver();
            try{
                driver.get("https://www.biblico.it/index.html");
         List<WebElement> links = ((ChromeDriver) driver).findElementsByTagName("a");
                for(WebElement link: links) {
                    if (link != null) {
                        String text = link.getAttribute("innerHTML");
                        String href = link.getAttribute("href");
    
                        System.out.println(text+" "+href);
                    }
                }
                driver.close();
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      相关资源
      最近更新 更多