无法将phantom.exit()放入phantomjs中的page.eevaluate()中
Cannot put phantom.exit() inside page.evaluate() in phantomjs
我有两个代码示例,如下所示:
var page = require('webpage').create();
page.open('https://www.youtube.com', function(s) {
console.log(s);
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
var t = page.evaluate(function() {
console.log('here');
phantom.exit(); // case 1: inside page.evaluate()
});
});
});
->在这种情况下,phantom.exit()被放在page.eevaluate()中,出现错误:"ReferenceError:找不到变量:phantom"
var page = require('webpage').create();
page.open('https://www.youtube.com', function(s) {
console.log(s);
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
var t = page.evaluate(function() {
console.log('here');
});
phantom.exit(); // case 2: outside page.evaluate()
});
});
->在情况2中:phantom.exit()被放在page.eevaluate()之外。没有错误,但"here"没有打印出来。
=>以上两种方式都无法打印出"此处"。有没有什么有效的方法可以在没有错误的情况下打印"这里"?
您不能在页面内部使用任何phantom
方法,就像页面本身不能使用它们一样。
phantom
对象是一个特殊的主机对象,由运行时提供给它最初启动的脚本。加载页面后,页面将在其自己的上下文中运行,其中包含通常的浏览器变量,但不包括phantom
。
您需要等待page.evaluate
回调到phantom脚本,然后从那里调用exit
。Phantom文档显示了这种确切的情况,在evaluate
返回后调用exit
。它们似乎没有涵盖evaluate
是否阻塞,但这个例子表明它可能是。
要从页面捕获日志消息,您需要订阅其onConsoleMessage
事件。Phantom控制台只从正在运行的脚本中接收消息,而不会接收可能加载的任何页面。您所需要做的就是将页面消息路由到幻影控制台:
page.onConsoleMessage = function(msg) {
console.log('PAGE: ' + msg);
};
尝试返回所需的数据,并在评估后执行console.log()
示例
var page = require('webpage').create();
page.open('https://www.youtube.com', function(s) {
console.log(s);
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
var t = page.evaluate(function() {
return "here";
});
console.log(t);
phantom.exit(); // case 2: outside page.evaluate()
});
});
相关文章:
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 可以't让我的if语句处理js中的html表单输入
- 引用对象中的通用值
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 用程序搜索JQuery数据表中的文本
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 不能从angular2中的子组件指定父组件中的数组
- ascx page 中的 javascript 抛出 HTTPexception
- Rails应用程序中的每个javascript文件都需要.on('page:change',初始化)吗?
- 如何通过java脚本限制粘贴文本框(Aspx.page)中的整数或字符值
- 在javascript中的page ready中查找输入值修改的来源
- 如何正确调用 Page.ClientScript 中的函数
- 如何摆脱我网站网址中的 /webroot/page/home
- 如何在PhantomJS中使用page.open之外的变量
- 无法将phantom.exit()放入phantomjs中的page.eevaluate()中
- Razor View Page html按钮onclick属性将无法识别嵌套代码块中的变量
- 无法从CRM中的HTML web资源中访问Xrm.Page.context
- 使用C#Page.aspx中的参数调用Javascript函数
- Facebook pagetab (Page Facebook) 中的日期选择器