gpt4 book ai didi

debugging - 无法使用 PhantomJS 远程调试器在断点处访问 casper 实例方法

转载 作者:行者123 更新时间:2023-12-02 15:39:05 25 4
gpt4 key购买 nike

我正在尝试调试 casperjs 脚本 using the remote debugger我发现 casper 实例方法在脚本执行完成之前不起作用。这似乎是 then() 和 run() 在 casper 中如何工作的一些回调怪癖,但我不确定如果您无法暂停程序执行并运行代码,那么调试器的 casper 控制台端如何有用如果它仍在运行( this answer 听起来确实可以)。

例如,hello_wolfram.js启动 casper 实例,转到 Wolfram alpha,回显页面标题,搜索分形,然后再次回显页面标题。这些页面标题调用在运行脚本中工作正常,但如果我尝试在 casper 上下文控制台中运行该命令,它将返回 null。其他 casper 方法也不起作用。虽然 casper 变量已定义,但我确实可以访问一个漂亮的、信息丰富的 Casper 对象。

var casper = require('casper').create();                                                                                                                                                                                                                                                         
casper.start('http://www.wolframalpha.com');

// echo page title for sanity check
casper.then(function(){
debugger; // 1
this.echo('Hello, Wolfram! The Page title is ' + this.getTitle());
});

// enter search term and submit form
casper.then(function() {
this.fill('form.index', {'i': 'fractals'}, true)
});

// echo page title on search results page
casper.then(function(){
debugger; // 2
this.echo('The Page title is now ' + this.getTitle());
});

casper.run();

休息 1:

  • 定义了 casper 变量并返回一个 Casper 对象currentURL="http://www.wolframalpha.com/"
  • casper.getTitle() 返回 null

休息2:

  • 定义了 casper 变量并返回一个带有 currentURL="http://www.wolframalpha.com/input/?i=fractals"的 Casper 对象
  • casper.getTitle() 返回 null

我真的希望我可以在 casper 控制台中运行 casper 命令,并在另一个窗口中查看它们对 DOM 的影响,这看起来就像调试器会给你的那样。有没有办法用 casperjs 做到这一点?

最佳答案

当您到达断点时,casper 执行会暂停。您可以访问 casper 对象上的任何属性,但要运行 casper 命令,您需要将它们添加到队列中。这只是意味着将其包装在 casper.then() 中,然后单步跳过断点。

在第一个中断处,如果您运行 casper.steps.length,则您有 5 个步骤,并且当前处于第 3 步(casper.step 的输出)。

然后您可以添加包含在 casper.then() 中的 getTitle 代码:

casper.then(function() {
this.echo('The Page title is now ' + this.getTitle());
});

现在casper.steps.length === 6;您已在当前步骤之后添加了一个步骤,但仍处于断点

因此继续/执行,您的文本将被打印。如果您愿意,可以在 casper.then() block 内添加其他 debugger 语句;然后您将在第 4 步(您新添加的步骤)处暂停。脚本选项卡将使用仅包含您的函数的小脚本进行更新。

<小时/>

有关 casper.then 的更多信息,请参阅此答案:https://stackoverflow.com/a/11957919

关于debugging - 无法使用 PhantomJS 远程调试器在断点处访问 casper 实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29369162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com