CasperJS click()不加载新的html

rag*_*oth 5 html javascript phantomjs casperjs

我正在尝试使用CasperJS' click()来跟踪在当前屏幕上生成模态的链接.当我查询正确的选择器并使用document.querySelector().click()它在浏览器控制台中单击它时,但即使我casper.evaluate()这样做它也不起作用.我找到了一个有类似问题的人,但他的问题仍然没有答案,我遇到了几乎相同的问题.casperjs按钮单击不导航到下一页 我正在使用的代码是

this.waitForSelector('div.talk-sharing__tools a.rate-button', function() {
    this.then(function() {
        this.evaluate(function() {
            document.querySelector('a.rate-button').click();
});
Run Code Online (Sandbox Code Playgroud)

我想刮页面http://www.ted.com/talks/uri_alon_why_truly_innovative_science_demands_a_leap_into_the_unknown

Art*_* B. 6

使用phantomjs引擎执行这些导航步骤实际上是不可能的.似乎幻像的QtWebkit分支(版本1.9.7)不再适用于任务.虽然你的代码工作正常的是与slimerjs.你可以通过npm舒适地安装slimerjs:

npm install -g slimerjs
Run Code Online (Sandbox Code Playgroud)

并运行您的脚本

casperjs --engine=slimerjs script.js
Run Code Online (Sandbox Code Playgroud)

我试过几件事情与phantomjs 没有工作.我加casper.on了听众remote.messageresource.error,但在运行中的虚线脚本时那些没有表现出任何错误.logLevel: "debug"也没有显示任何东西.

第一:使用casperjs函数.

casper.thenClick("div.talk-sharing__tools a.rate-button");
Run Code Online (Sandbox Code Playgroud)

第二:尝试明确显示按钮的模态(特定于页面).

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");
Run Code Online (Sandbox Code Playgroud)

第三:让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();
    });
});
Run Code Online (Sandbox Code Playgroud)