gpt4 book ai didi

java - 如何在 HtmlUnit 中的页面请求和 DOM 响应之间添加一些等待时间?

转载 作者:行者123 更新时间:2023-12-02 01:38:49 26 4
gpt4 key购买 nike

enter image description here我正在尝试使用 HtmlUnit 获取与某个网页 ( https://digital.utc.com/our-latest ) 相关的所有链接,但显然,它并没有检索页面内的所有链接

我尝试在检索 DOM 之前为 HtmlUnit 添加一些等待时间,然后将其添加到 HtmlPage 中。我怀疑 HtmlUnit 检索 DOM 并在使用“连接到网页后将其分配给 htmlpage” WebClient.getpage()”,不留任何时间让页面从数据库加载数据。但我找不到任何使用 HtmlUnit 的方法

public void pageScrapping() throws FailingHttpStatusCodeException, MalformedURLException, IOException
{
//Initializing the WebClient
WebClient webClient = new WebClient();
webClient.setThrowExceptionOnScriptError(false);
webClient.setThrowExceptionOnFailingStatusCode(false);
webClient.setCssEnabled(false);
webClient.setJavaScriptEnabled(false);
webClient.setTimeout(10000);

HtmlPage page = webClient.getPage("https://digital.utc.com/our-latest");

try
{
Thread.sleep(3000);
}

catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

page = page.getPage();
String htmlContent2 = page.asXml();
File htmlFile2 = new File("Website2_XML.html");
PrintWriter pw2 = new PrintWriter(htmlFile2);
pw2.print(htmlContent2);
pw2.close();

System.out.println(page.getTitleText());

DomNodeList<HtmlElement> links = (DomNodeList<HtmlElement>) page.getElementsByTagName("a");

for (HtmlElement domElement : links)
{
System.out.println(domElement.getAttribute("href"));
System.out.println();
}

}
  • 我期望的是 HtmlUnit 将返回在网页中找到的具有“href”属性的整个链接

  • HtmlUnit 返回的实际结果有一些缺失的链接,即使浏览器检查器正确返回,也无法从页面检索到这些链接

** 缺失的链接将在从数据库检索的表单或文章列表的右侧找到

最佳答案

我看到的唯一没有 href 的链接(使用此代码)是带有 onClick 处理程序的 anchor 。您能否添加更多有关您错过的内容的详细信息。

    final String url = "https://digital.utc.com/our-latest";

try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_60)) {
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setCssEnabled(false);;
webClient.getOptions().setJavaScriptEnabled(false);

HtmlPage page = webClient.getPage(url);
webClient.waitForBackgroundJavaScript(4_000);

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

DomNodeList<DomElement> links = page.getElementsByTagName("a");
for (DomElement domElement : links)
{
String href = domElement.getAttribute("href");
System.out.println(domElement.asXml());
}
}

一如既往,确保您使用的是最新的 SNAPSHOT 版本。

更新:对媒体查询处理进行了一个小修复,以避免运行我的代码时遇到的 NPE。请使用最新的 SNAPSHOT 版本。

关于java - 如何在 HtmlUnit 中的页面请求和 DOM 响应之间添加一些等待时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57501207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com