CasperJS click()不会加载新的html

时间:2014-06-13 04:13:33

标签: javascript html phantomjs casperjs

我试图使用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

2 个答案:

答案 0 :(得分:6)

使用phantomjs引擎执行这些导航步骤实际上是不可能的。似乎幻像的QtWebkit分支(版本1.9.7)不再适用于任务。尽管您的代码与slimerjs一样正常正常。您可以通过npm轻松安装slimerjs:

npm install -g slimerjs

并使用

运行脚本
casperjs --engine=slimerjs script.js

我尝试使用幻像无法正常工作。我为casper.onremote.message添加了resource.error个侦听器,但是这些在幻像中运行脚本时没有显示任何错误。 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();
    });
});

答案 1 :(得分:0)

今天遇到类似的问题。在开始页面上执行this.click()之后(我通过挂钩resource.requestedresource.received事件验证了PhantomJS正在执行),当前页面保留在起始页面上(它应该转到点击链接)页)。

解决方案是更新到最新的PhantomJS(此时为1.9.8)。

请注意,当出现上述问题时,我有PhantomJS 1.9.7。