我正在尝试使用远程调试器调试casperjs脚本,我发现在脚本执行完成之前,casper实例方法不起作用。 看起来这是一些关于then()和run()如何在casper中工作的回调怪癖,但我不确定如果你不能暂停程序执行并运行代码,调试器的casper控制台端是如何有用的如果它仍然在运行( 这个答案真的让你听起来像)。

例如, 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变量并返回一个Casper对象,其中currentURL =“http://www.wolframalpha.com/input/?i=fractals”
  • casper.getTitle()返回null

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

#1楼 票数:0

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

在休息一,如果你运行casper.steps.length ,你有5个步骤,你目前在步骤3(输出casper.step )。

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

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

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

继续/步骤,您的文字将被打印。 如果需要,可以在casper.then()块中添加其他debugger语句; 然后,您将在步骤4(新添加的步骤)暂停。 脚本选项卡将使用仅包含您的功能的小脚本进行更新。


有关casper.then更多信息,请casper.thenhttpscasper.then

  ask by hurtstotouchfire translate from so

未解决问题?本站智能推荐:

1回复

如何使用Chrome远程调试CasperJS?

在Chrome中调试CasperJS脚本的步骤是什么? 我正在尝试在我的Windows 8.1上进行调试。 1)我的测试c:\\ temp \\ googletestin.js有: 2)打开cmd.exe 3)执行命令行 ps:测试运行到正常结束 4)打开ch
2回复

CasperJS远程调试选项

我正在尝试为casperJS使用远程调试选项。 我在6666端口上运行它。 调试器启动,我可以访问url上的WebKit检查器 我看到的第一个URL是about:blank 。 当我点击它时,网页检查器加载。 当我在控制台中输入_run()时,我得到了 引
3回复

从PhantomJS / CasperJS中的“SyntaxError:Parse error”消息中获取更多信息

我有一个很长的CasperJS脚本。 当我运行它时,我得到: 有没有办法获得有关错误的更多信息。 至少一个行号? 或任何暗示?
5回复

通过PhantomJS调用时找不到模块'casper'

我在C:\\ xampp \\ htdocs \\ phantom中安装了PhantomJS,并且我在这个文件夹C:\\ xampp \\ htdocs \\ casper中安装了CasperJS 当我尝试使用phantomjs test.js命令在casper站点上运行这些示例代码时:
1回复

输出带有casper / phantomjs的客户端控制台

通过casperjs文档我无法找到从客户端javascript中看到console.log的位置。 这可能吗?
1回复

如何从phantomjs shell中运行casper?

任何人都知道是否以及如何从phantomjs shell(又名InteractiveModeREPL )中运行casperjs? 我也尝试将直接路径传递给casper.js模块,但这也没有用。 进展/更新: 尝试了phantomjs.injectJs('C:/casper
1回复

Phantomjs / Casper无法渲染 里面

我正在进行此测试,我必须获取pdf文件的内容。 html结构(在传统浏览器上在客户端渲染之后)是这样的 当我在卡斯珀上输出html时,iframe内容为空,我的代码是这样的 我不明白为什么phantom不会用pdf文件渲染元素,对此有解决方法吗?
2回复

使用IntelliJ / WebStorm和PhantomJS / Casper设置JS调试

我可以在PhantomJS和/或CasperJS上使用交互式JS调试器吗?