javascript - 无法获取 CasperJS 的链接

标签 javascript screen-scraping casperjs

我尝试运行此代码并得到“未定义”。有谁知道这段代码有什么问题吗?

var casper = require('casper').create();

casper.start('http://casperjs.org/', function() {
    this.echo(document.querySelector('a'));
});

casper.run();

最佳答案

CasperJS 构建在 PhantomJS 之上,PhantomJS 有两个上下文。内页上下文casper.evaluate()是沙箱中的,并且是唯一可以访问 DOM 的。

DOM 节点无法传递到外部上下文,因此您需要返回可以使用的元素的一些表示形式:

this.echo(this.evaluate(function(){
    return document.querySelector('a').href;
}));

我建议你研究一下 CasperJS 函数,这些函数是从中抽象出来的,比如 getElementInfo()getElementAttribute() .

PhantomJS documentation说:

Note: The arguments and the return value to the evaluate function must be a simple primitive object. The rule of thumb: if it can be serialized via JSON, then it is fine.

Closures, functions, DOM nodes, etc. will not work!

关于javascript - 无法获取 CasperJS 的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29780489/

相关文章:

javascript - eval函数的问题

javascript - 处理 Javascript 事件的正确方法

javascript - Twitter 上如何使用 CasperJS (PhantomJS) 处理无限滚动/动态加载

javascript - 如何在 .tsx typescript 中包含 .css 文件?

javascript - Ajax 响应成功后启动 jQuery 行?

perl - 如何找到 perl 打印的 "wide characters"?

python - 在 Python 中抓取 - 防止 IP 禁令

web-scraping - 爬取和抓取特别困难的网站?

node.js - 如何在不同的 casperjs 进程之间持久化 cookie

javascript - 为什么 this.evaluate 不能正确返回 DOM 节点?