我正在尝试使用 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 是正确的,我保留此结果的示例屏幕截图以供参考。
我想给出一些提示 - 这不是一个完整的解决方案
首先通过检查文本确保您从谷歌搜索到达正确的页面(就像您已经做的那样)。通常,在搜索执行过程中会执行大量 Javascript 代码 - 也许您使用 HtmlUnit 到达了不同的页面。
client.waitForBackgroundJavaScript(5000 * 2);
System.out.println(searchResultPage.asNormalizedText());
如果您在正确的页面上,请像 HtmlUnit 一样查看 DomTree。
System.out.println(searchResultPage.asXml());
然后您可以使用 xml 输出作为构建 XPath 表达式的基础。
如果您认为 xpath 评估本身仍然存在问题,如果您可以创建一个简单的示例(基于静态 html 页面)并为 github 项目打开一个问题,那就太好了。