javascript - 使用 casperjs 从灯箱中抓取文本

标签 javascript casperjs

我正在使用 casperjs 从网站上抓取文本,到目前为止效果很好。然而,我正在抓取的这个页面上有数百种产品,其中一些产品旁边有一个橙色按钮。

橙色按钮有一个按钮小橙色类。如果您点击这个橙色按钮,它将弹出一个带有产品描述的灯箱。

我如何让 casper 点击橙色按钮(如果有)然后抓取描述,然后退出灯箱,然后继续迭代 100 个产品?

最佳答案

您需要确定每个步骤中涉及的元素。您可以使用 Firefox 或 Chrome 中的开发人员工具来完成此操作。

你可以这样找到元素的数量:

var buttonNumber = casper.getElementsInfo(".button.small.orange").length;

然后,您可以迭代按钮并考虑最大值:

var x = require('casper').selectXPath
for(var i = 0; i < buttonNumber; i++) {
    casper.thenClick(x("(//*[contains(@class,'button') and contains(@class,'small') and contains(@class,'orange')])["+(i+1)+"]"));
    scheduleScrapeAndClose();
}

XPath 表达式的 //*[contains(@class,'button') and ...] 部分基本上等同于 .button.small.orange CSS 选择器。它返回一个节点列表,之后的索引就是您迭代的按钮。例如:(//*[...])[1]

您唯一要做的就是定义 scheduleScrapeAndClose 函数。它可能看起来像这样:

function scheduleScrapeAndClose(){
    casper.waitUntilVisible("your light box selector");
    casper.then(function(){
        // scrape the description
        var descr = this.fetchText("your description selector");
        this.click("your light box close selector");
    });
    casper.waitWhileVisible("again, your light box selector");
}

我假设每次点击按钮时只存在一个灯箱。

把它们放在一起看起来像这样:

var x = require('casper').selectXPath,
    casper = require('casper').create();

function scheduleScrapeAndClose(){
    // stuff from above
}
casper.start(url);
casper.then(function(){
    var buttonNumber = casper.getElementsInfo(".button.small.orange").length;
    for(var i = 0; i < buttonNumber; i++) {
        casper.thenClick(x("(//*[contains(@class,'button') and contains(@class,'small') and contains(@class,'orange')])["+(i+1)+"]"));
        scheduleScrapeAndClose();
    }
});
casper.run(function(){this.exit();});

关于javascript - 使用 casperjs 从灯箱中抓取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24498550/

相关文章:

javascript - 使用 Node.js 全局连接 Sql 查询

javascript - 将字符串拆分为各种文本元素

javascript - CasperJS 测试覆盖率

javascript - 在回调函数中访问全局变量

javascript - Canvas.toDataURL() 解决方法?

javascript - JQuery Mobile 导航栏列表项未垂直对齐

javascript - JQuery FadeIn 和 CSS 幻灯片是断断续续的

load-testing - 用于负载测试的多个 CasperJS/phantomJS 实例

javascript - 使用文本从下拉列表中选择值

javascript - CasperJS:评估()返回空值