作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我是一名优秀的程序员,十分优秀!