【问题标题】:Cannot access DOM element with captureSelector in CasperJS无法在 CasperJS 中使用 captureSelector 访问 DOM 元素
【发布时间】:2015-08-09 16:03:09
【问题描述】:

我正在尝试通过仅截取广告的屏幕截图来使用 CasperJS 抓取一些图像(在本例中为广告)。我已经确定了 DIV“creative_xxxxx”的唯一 ID,但是到目前为止,我无法访问选择器或下图中的任何选择器。

选择器不在页面源上,可能是因为它们是在页面加载期间插入的,但可以在 FireBug 中看到:

基本上我想知道如何访问上面的选择器,或者更一般地说,任何不在原始页面源中的选择器。我认为 Casper 执行了 JavaScript,因此这不是问题,但也许我误解了?

选择器在 iFrame 内,我使用了 casper.withFrame(frame, function(),但选择器似乎仍然不存在。这是我试图从中抓取的网站:

http://www.trustedreviews.com/vacuum-cleaners

【问题讨论】:

    标签: javascript css-selectors web-scraping phantomjs casperjs


    【解决方案1】:

    广告有时(通常?)是动态加载的。广告元素标识符通常是动态的,因此您需要尝试部分标识符匹配。这可以通过 CSS 选择器实现:

    • #id_123id="id_123" 完全匹配
    • [id ^= "id_"] 从头开始​​匹配或
    • [id *= "id_"] 匹配属性 id 中的某处

    示例代码:

    casper.withFrame(..., function(){
        this.captureSelector("ad.png", "[id^='DfaVisibilityIdentifier'] > [id^='creative']");
    });
    

    请注意,PhantomJS 不支持 flash。因此,基于 Flash 的广告要么是白色的,要么是黑色的。

    【讨论】:

    • 我没有尝试过,但是对于框架内的元素,这可能无法正常工作。
    • 感谢您的回复。我没有意识到 Flash 不受支持 - 我认为这将使 Casper 无法抓取广告,因为它们是 Flash 横幅。
    • 你可以将 SlimerJS 与 xvfb 结合使用。还有一个old PhantomJS fork which should support flash
    • 我会研究 PhantomJS 的分支。示例代码运行良好,但正如您所说,结果是一个白框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 2016-10-14
    • 2016-09-05
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    相关资源
    最近更新 更多