无法在CasperJS中使用captureSelector访问DOM元素

时间:2015-05-27 13:56:21

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

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

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

enter image description here

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

示例代码:

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

请注意,PhantomJS不支持闪存。因此,基于Flash的广告将为白色或黑色。