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返回的实际结果有一些缺少的链接,即使浏览器检查器正确返回了该链接也无法从页面中获取
**缺少的链接将在右侧的窗体或文章列表中找到,该列表或条目从数据库中检索出
答案 0 :(得分:0)
我看到(使用此代码)没有href的唯一链接是带有onClick处理程序的锚点。 您能补充一下您想念的内容的详细信息吗?
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版本。