CasperJS在浏览器控制台上调用Javascript函数

CasperJS在浏览器控制台上调用Javascript函数,javascript,methods,javascript-events,phantomjs,casperjs,Javascript,Methods,Javascript Events,Phantomjs,Casperjs,我正在尝试使用CasperJS调用一个javascript方法。 该网页只包含一个链接,允许我更改回默认国家/地区 <a id="defaultCountry" href="javascript:__doPostBack('cty$UK$default','')">Default Country</a> 或 我知道如果我在浏览器控制台上调用javascript函数,它就会工作。我只需键入: __doPostBack('cty$UK$default',''); 在控制台

我正在尝试使用CasperJS调用一个javascript方法。 该网页只包含一个链接,允许我更改回默认国家/地区

<a id="defaultCountry" href="javascript:__doPostBack('cty$UK$default','')">Default Country</a>

我知道如果我在浏览器控制台上调用javascript函数,它就会工作。我只需键入:

__doPostBack('cty$UK$default','');
在控制台中,它神奇地工作。 感谢您的帮助


编辑:

@里波这是我跑步的片段。似乎CasperJS绕过了我的eval语句。最后几行直接来自控制台。由于屏幕截图,我知道我的页面加载了选择器。我甚至用casper.waitforselector方法来确认

casper.thenOpen('http://example.com');

casper.wait(5000, function() {
    console.log('page opened');
    casper.capture('page.png');
    console.log('capture page complete');
});

casper.thenEvaluate(function() {
    console.log('invoking javascript');
    __doPostBack('cty$UK$default','');
    console.log('javascript invoked');
});
这是从控制台:

[info] [phantom] wait() finished waiting for 5000ms.
page opened
[debug] [phantom] Capturing page to C:/Users/page.png
[info] [phantom] Capture saved to C:/Users/page.png
capture page complete
[info] [phantom] Step _step 8/8 http://example.com (HTTP 200)
[info] [phantom] Step _step 8/8: done in 16240ms.
[info] [phantom] Done 8 steps in 16259ms
[debug] [phantom] Navigation requested: url=about:blank, type=Other, willNavigate=true, isMainFrame=true
[debug] [phantom] url changed to "about:blank"
这是控制台退出前的最后一行


2016年7月17日12:40编辑

@阿特乔姆B。 以下是我根据您的建议运行的代码片段:

...snipped some prior    
function() {
    console.log('Page loaded');
    casper.capture('page.png');
    console.log('Starting 1st postback call');
    this.evaluate(function() {
        console.log('postback call');
         __doPostBack('cty$UK$default','');
        });
    console.log('passed postback');
    casper.capture('post-postback.png');

//At this point, it skips this function and goes straight to console.log then comes back to this function. Not sure why...
casper.then(function() {
    console.log('trying to change again');
    this.click(x('//*[@id="defaultCountry"]'));
    this.evaluate(function() {
        __doPostBack('cty$UK$default','');
        console.log('javascript invoked');
    });
});

//skipped to this console.log
console.log('waiting country to change');
this.waitForSelector('.countryuk', 
    function() {
        console.log('country change completed. Capturing image');
        this.capture('uk.png');
    },

    function() {
        console.log('timed out waiting for country to change.');
        this.capture('uk-timeout.png');
    },5000);
})

以下是控制台输出:

Page loaded
[debug] [phantom] Capturing page to C:/Users/page.png
[info] [phantom] Capture saved to C:/Users/page.png
Starting 1st postback call
Console: postback call
Error: ReferenceError: Can't find variable: __doPostBack
passed postback
[debug] [phantom] Capturing page to C:/Users/post-postback.png
[info] [phantom] Capture saved to C:/Users/post-postback.png
waiting country to change
[info] [phantom] Step anonymous 10/11 http://example.com/page.aspx?r=2 (HTTP 200)
trying to change again
[debug] [phantom] Mouse event 'mousedown' on selector: xpath selector: //*[@id="defaultCountry"]
[debug] [phantom] Mouse event 'mouseup' on selector: xpath selector: //*[@id="defaultCountry"]
[debug] [phantom] Mouse event 'click' on selector: xpath selector: //*[@id="defaultCountry"]
Error: ReferenceError: Can't find variable: __doPostBack
Error: ReferenceError: Can't find variable: __doPostBack
[info] [phantom] Step anonymous 10/11: done in 22567ms.
[info] [phantom] Step _step 11/11 http://example.com/page.aspx?r=2 (HTTP 200)
[info] [phantom] Step _step 11/11: done in 22573ms.
[warning] [phantom] Casper.waitFor() timeout
timed out waiting for country to change.
[debug] [phantom] Capturing page to C:/Users/uk-timeout.png
[info] [phantom] Capture saved to C:/Users/uk-timeout.png
[info] [phantom] Done 11 steps in 27825ms
[debug] [phantom] Navigation requested: url=about:blank, type=Other, willNavigate=true, isMainFrame=true
[debug] [phantom] url changed to "about:blank"

显然,它找不到回发功能。我不知道为什么。这不是一个隐藏的元素。这正是我在上面发布的(链接)。它嵌套在一堆div标记中,仅此而已。谢谢你的帮助

您可以访问链接的
href
,并使用
eval
功能

var str = document.getElementById("defaultCountry").href;
eval(str.substring(str.indexOf(":") + 1));
只是(删除
casper。然后
casper。单击


一旦我离开,CasperJS就爆发了。我将console.log放在代码的前面和后面。它会在前面解释console.log,但不会在后面解释。@kubermeso“爆发”是什么意思?你把申报和评估电话放在哪里?请看我上面的编辑。我将您的语句放在casper.thenEvaluate函数中。我也和casper试过了等等。work和casperjs都没有绕过代码
“defaultValue”
在问题中找不到,并且您的代码包含语法错误。有一个
missing@ArtjomB. Affund:我将您的声明放在我的console.log(“开始第一次回拨”)之后。它打破了剧本。下面是我控制台的最后几行:开始第一次回发呼叫[info][phantom]在22260毫秒内完成9个步骤[debug][phantom]请求的导航:url=about:blank,type=Other,willNavigate=true,isMainFrame=true[debug][phantom]url更改为“about:blank”我在回发调用中也看到过类似的问题。我的问题是Casperjs不处理我的eval函数,我不知道为什么。欢迎来到堆栈溢出!您使用哪个PhantomJS版本?请注册到
resource.error
page.error
remote.message
casper.page.onResourceTimeout
事件()。可能有错误。你还没有回答我的第一个问题。无论如何,您必须找出加载
\uu doPostBack
函数的请求没有被加载的原因。这是一个HTTPS请求吗?作为旁注
console.log('invoking javascript')内部使用echo计算到web浏览器控制台,而不是运行它的命令控制台。我想知道JS是否已完成加载?我怀疑你在页面的某个地方有JS错误。见@artjom评论
Page loaded
[debug] [phantom] Capturing page to C:/Users/page.png
[info] [phantom] Capture saved to C:/Users/page.png
Starting 1st postback call
Console: postback call
Error: ReferenceError: Can't find variable: __doPostBack
passed postback
[debug] [phantom] Capturing page to C:/Users/post-postback.png
[info] [phantom] Capture saved to C:/Users/post-postback.png
waiting country to change
[info] [phantom] Step anonymous 10/11 http://example.com/page.aspx?r=2 (HTTP 200)
trying to change again
[debug] [phantom] Mouse event 'mousedown' on selector: xpath selector: //*[@id="defaultCountry"]
[debug] [phantom] Mouse event 'mouseup' on selector: xpath selector: //*[@id="defaultCountry"]
[debug] [phantom] Mouse event 'click' on selector: xpath selector: //*[@id="defaultCountry"]
Error: ReferenceError: Can't find variable: __doPostBack
Error: ReferenceError: Can't find variable: __doPostBack
[info] [phantom] Step anonymous 10/11: done in 22567ms.
[info] [phantom] Step _step 11/11 http://example.com/page.aspx?r=2 (HTTP 200)
[info] [phantom] Step _step 11/11: done in 22573ms.
[warning] [phantom] Casper.waitFor() timeout
timed out waiting for country to change.
[debug] [phantom] Capturing page to C:/Users/uk-timeout.png
[info] [phantom] Capture saved to C:/Users/uk-timeout.png
[info] [phantom] Done 11 steps in 27825ms
[debug] [phantom] Navigation requested: url=about:blank, type=Other, willNavigate=true, isMainFrame=true
[debug] [phantom] url changed to "about:blank"
var str = document.getElementById("defaultCountry").href;
eval(str.substring(str.indexOf(":") + 1));
 casper.thenEvaluate(function() {
       __doPostBack('cty$UK$default',''); 
 });