奇怪的导航元素代码在页面源代码中不可见

Strange nav element code not visibile in the page source

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

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

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

抱歉,如果缺少更多信息,但这些信息应该足以让您有所了解。

问题是 Jsoup 无法处理由某些脚本动态生成的元素,并且动态生成的元素永远不会在任何浏览器中使用 "View page source" 选项显示。另一方面,chrome 中的 "inspect element" 函数可以显示这些动态生成的元素的代码。我发现 WebElement.GetAttribute() 方法实际上与 chrome 中的 "inspect element" 函数一样工作,它解决了我的问题。 所以 java 获取 https://www.biblico.it/index.html 中所有链接的代码是:

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();
        }