我正在尝试使用 CasperJS 的 click()
来跟踪在当前屏幕上生成模态的链接。当我查询正确的选择器并使用 document.querySelector().click()
在浏览器控制台中单击它时,它起作用了,但即使我 casper.evaluate()
这它不起作用。我发现有人遇到了非常相似的问题,但他的问题仍未得到解答,而我遇到的问题几乎相同。 casperjs button click doesn't navigate to next page
我目前使用的代码是
this.waitForSelector('div.talk-sharing__tools a.rate-button', function() {
this.then(function() {
this.evaluate(function() {
document.querySelector('a.rate-button').click();
});
我要抓取的页面是 http://www.ted.com/talks/uri_alon_why_truly_innovative_science_demands_a_leap_into_the_unknown
最佳答案
用 phantomjs 引擎做那些导航步骤真的是不可能的。似乎 phantom 的 QtWebkit 分支(版本 1.9.7)不再能胜任这项任务。尽管您的代码在 slimerjs 中原样工作正常。您可以通过 npm 轻松安装 slimerjs:
npm install -g slimerjs
并运行你的脚本
casperjs --engine=slimerjs script.js
我用 phantomjs 尝试了一些不起作用的东西。我为 remote.message
和 resource.error
添加了 casper.on
监听器,但是在 phantom 中运行脚本时没有显示任何错误. logLevel: "debug"
也没有显示任何内容。
首先:使用 casperjs 函数。
casper.thenClick("div.talk-sharing__tools a.rate-button");
其次:尝试显式显示按钮的模式(特定于页面)。
casper.then(function(){
var name = this.evaluate(function(){
var modal = document.querySelectorAll(".modal-wrapper > .modal")[0];
modal.className += " modal--show";
return modal.className;
});
this.echo("name: "+name); // null
});
casper.waitUntilVisible(".modal__head__title");
第三:让 jQuery 完成工作。
var casper = require('casper').create({
remoteScripts: [ "http://code.jquery.com/jquery-1.11.1.min.js" ]
});
casper.waitForSelector(selector, function() {
this.evaluate(function() {
jQuery("a.rate-button").click();
});
});
关于javascript - CasperJS click() 不加载新的 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24197587/