使用来自CasperJS页面的querySelectorAll提取数据

时间:2016-01-12 06:51:34

标签: javascript css-selectors casperjs

CasperJS脚本

listItems = this.evaluate(function () {
    var nodes = document.querySelectorAll('ul > li');
    return [].map.call(nodes, function(node) {
        return node;
    });
});

var tr_data = listItems.map(function(str) {
    var elements = str;
    // var data = {
    //     ip        : ????
    // };
    return elements;
});

页面标记

<ul>
    <li> // Multiple Li
        <div class=“image”>
            <div class=“thumb”>
                <p>
                    <img src=“SOURCE” > // Retrieve SOURCE

            <div class=“text”>
                <p>TEXT </p> // Retrieve TEXT

我试图检索来源文字。请告知我在哪里可以学习如何检索SOURCE&amp;粗体文字。

1 个答案:

答案 0 :(得分:0)

PhantomJS仅支持将原始对象传入或传出页面上下文(page.evaluate())。 DOM节点是无法传递的复杂对象。 CasperJS具有完全相同的限制。

您可以在页面上下文中创建一个原始对象并将其传递出去:

casper.then(function(){
    var listItems = this.evaluate(function () {
        var nodes = document.querySelectorAll('ul > li');
        return [].map.call(nodes, function(node) {
            return {
                source: node.querySelector(".thumb img").src,
                text: node.querySelector("div.text p").textContent
            };
        });
    });
    this.echo(JSON.stringify(listItems, undefined, 4)); // pretty print
});