带有 xpath 的 Html 单元未返回预期结果

问题描述 投票:0回答:1

我正在尝试使用 Html 单元使用谷歌搜索来筛选特定新闻报纸特定日期的热门新闻。我能够获取搜索结果,但是当我尝试使用 xpath 访问热门新闻链接时,它失败了。以下是失败的代码片段。

        HtmlPage page = client.getPage("https://www.google.co.in");

        List<HtmlForm> allForms = page.getForms();
        System.out.println("No of Forms Detected :  ---  " + allForms.size());
        HtmlForm searchForm = allForms.get(0);
        HtmlTextArea searchTextArea = searchForm.getTextAreaByName("q");
        searchTextArea.setText("24 June 2019 news, the hindu");

        HtmlInput gSearch = searchForm.getInputByName("btnK");
        HtmlPage searchResultPage = (HtmlPage) gSearch.click();
        client.waitForBackgroundJavaScript(5000 * 2);
        System.out.println(searchResultPage.asNormalizedText());
        String xpath = "//*[@id='web']/ol/li[2]/div/div[1]/h3/a";

        HtmlAnchor topNewsLink = (HtmlAnchor) searchResultPage.getByXPath(xpath).get(0);
        HtmlPage postPage = topNewsLink.click();

        System.out.println(postPage.asNormalizedText());

在此

(HtmlAnchor) searchResultPage.getByXPath(xpath)
;结果始终为 null。 xpath 是正确的,我保留此结果的示例屏幕截图以供参考。

java xpath htmlunit
1个回答
0
投票

我想给出一些提示 - 这不是一个完整的解决方案

首先通过检查文本确保您从谷歌搜索到达正确的页面(就像您已经做的那样)。通常,在搜索执行过程中会执行大量 Javascript 代码 - 也许您使用 HtmlUnit 到达了不同的页面。

client.waitForBackgroundJavaScript(5000 * 2);
System.out.println(searchResultPage.asNormalizedText());

如果您在正确的页面上,请像 HtmlUnit 一样查看 DomTree。

System.out.println(searchResultPage.asXml());

然后您可以使用 xml 输出作为构建 XPath 表达式的基础。

如果您认为 xpath 评估本身仍然存在问题,如果您可以创建一个简单的示例(基于静态 html 页面)并为 github 项目打开一个问题,那就太好了。

© www.soinside.com 2019 - 2024. All rights reserved.