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

标签 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

最佳答案

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

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

示例代码:

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

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

关于javascript - 无法在 CasperJS 中使用 captureSelector 访问 DOM 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30484663/

相关文章:

javascript - JQuery 下拉列表通过文本选择选项

html - 如何将 CSS 应用于 :last-child button

css - 是:not possible on a wildcard attribute selector

python - python中将字符串分为数字和字母

php - 无法从HTML页面获取表格数据

Python - 使用 Wget 下载图像。如何向每个文件添加一个字符串?

javascript - 如何设置加载 React 应用程序时运行的 firebase auth onAuthStateChanged() 监听器?

javascript - jQuery - 隐藏元素但保留空间

javascript - 在添加到下拉列表之前检查重复的名称

html - 为什么我的首创 CSS 选择器适用于所有内容?