【问题标题】:HtmlUnit click() on div does not trigger JavaScriptdiv 上的 HtmlUnit click() 不会触发 JavaScript
【发布时间】:2017-01-08 08:39:30
【问题描述】:

我正在尝试从以下网站获取所有图片:http://web.archive.org/web/20160110012916/http://habibemaia.com/。我可以通过收集所有“src”标签并从那里下载来获得几乎所有内容,但是主图片存在问题,该图片由javascript更改,无论是定时还是点击事件。我这样设置我的网络客户端:

webClient.getOptions().setCssEnabled(true);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.waitForBackgroundJavaScript(15000);
webClient.waitForBackgroundJavaScriptStartingBefore(5000);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getOptions().setUseInsecureSSL(true);

得到 div 后,我尝试像这样使用 click:

HtmlPage newPage = div.click();
DomNodeList<DomElement> newImages = newPage.getElementsByTagName("img");
for (DomElement img : newImages) {
    if (img.hasAttribute("src")) {
        newImagesStrings.add(img.getAttribute("src"));
        System.out.println("Image added: "+img.getAttribute("src"));
    }
}

如果我在浏览器中单击此 div,则会出现一个新图像。不幸的是,此代码不会触发更改图像的 javascript。我试过使用

webClient.waitForBackgroundJavaScript(3000);

在 click() 之后,正如其他地方所建议的那样,但没有运气。页面没有变化。现在我完全没有想法了。感谢您的帮助。

【问题讨论】:

    标签: javascript java htmlunit


    【解决方案1】:
    webClient.waitForBackgroundJavaScript(15000);
    webClient.waitForBackgroundJavaScriptStartingBefore(5000);
    

    都是无选项设置。如果您在某些操作后调用它们才有意义 - 从代码的设置部分中删除它。

    关于图像:我使用 firebug 对页面进行了快速分析。对我来说,看起来所有图像都是代码的一部分,而 javascript 只切换可见性(带有一些花哨的效果)。

    可能是这样的:

    • 找到具有“cameraCont”类的 div
    • 使用样式“cameraSlide”遍历所有子级
    • 每个 div 都有一个指向不同图像的 img 子级

    【讨论】:

    • 你是对的,解决了它。也感谢其他提示!
    • 嗯,我可以在 Chrome 调试中看到图片链接,但是当我执行 getPage() 时,只有第一张图片在那里,其他 div 是空的。
    • 可能是因为其他 div 有 display: none 样式?我希望这些 div 通常收集所有 div,而不是按类或 id。我使用的 2.20 版本可能有问题?
    • 2.20 真的很老了。使用最新的快照版本 (htmlunit.sourceforge.net/gettingLatestCode.html) 通常是个好主意。我们一直在进行大量增强和错误修复,对于快照版本,我们进行了与真实版本相同的质量检查。
    • 但是当我使用 getPage() 和 waitForBackgroundJavascript(10000) 时,为什么说的 div 是空的,但是当我去页面并检查 Chrome 时,它​​们被 src 标签填充?难道这与 HtmlUnit 没有得到带有 display: none 的 div 有关系吗?
    猜你喜欢
    • 2014-11-25
    • 2012-11-20
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多