CasperJS - DOM方法不会在evaluate()函数中执行

时间:2017-06-04 22:29:40

标签: javascript web-scraping phantomjs casperjs

这是代号中的一部分:

string FindDestination(State q0, Event s0, IEnumerable<string[]> transitions) {

    var newq = from t in transitions
                 where t[0] == q0.Name && t[1] == s0.Name
                 select t[2];

    return newq.FirstOrDefault();
}

var obj = {}; function putInObject() { obj.title = document.querySelector('[itemprop="title"]').innerText; obj.description = document.querySelector('[itemprop="description"]').innerText; } casper.then(function(){ casper.wait(1000,function(){ links = this.evaluate(getItemLinks); casper.each(links, function(self, link) { self.thenOpen(link, function() { this.echo(this.getTitle()); this.wait(7000, function(){ console.log("**************** \n WebPage is loaded \n ****************"); // Appearantly, The putInObject() doesn't run and "obj" remains null casper.evaluate(putInObject); this.echo(obj); }); }); }); }); }); 函数无法运行,即使我用{:}替换了putInObject()

casper.evaluate(putInObject);

但它也不起作用,并且obj被打印到像this.evaluate(function() { obj.title = document.querySelector('[itemprop="title"]').innerText; obj.description = document.querySelector('[itemprop="description"]').innerText; }); 这样的控制台。

然而,[object Object]工作正常,并在控制台中打印页面标题。

以上代码的日志:

this.echo(this.getTitle());

1 个答案:

答案 0 :(得分:1)

String line = "Field1,Field2,Field3,Field4,Field5,Field6#Field1,Field2,Field3"; String arr [] = line.split(",|#"); for (String s : arr) { System.out.println(s); } 就像是进入另一个与我们不同的世界的门户。 可能一个名称为page.evaluate的对象,但它与CasperJs脚本开头声明的obj不同。这些是不同的对象。 obj中发生的情况会保留在page.evaluate中 - 除非您专门请求返回一些数据。

page.evaluate