我的代码是:
var url = 'https://search.yahoo.com/',
page = new WebPage(),
fs = require('fs');
page.settings.userAgent = 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail appname/appversion';
page.onConsoleMessage = function (msg) {
console.log(msg);
};
page.open(url, function(status) {
if (status !== 'success')
{
console.log('Unable to access network');
phantom.exit();
return;
}
else
{
page.includeJs("https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js", function()
{
page.evaluate(function()
{
$('#yschsp').val("ask question");
$(".sbb").click();
});
page.onLoadFinished = function(status) {
var content = page.content;
fs.write('1.html', content, 'w');
console.log($('#link-1').val());
phantom.exit();
};
});
}
});
JQuery在page.evaluate
中运行得很完美,但在page.onLoadFinished
中不起作用。我收到错误
无法变量:$
这意味着在函数page.onLoadFinished
中jquery不起作用。但我不明白为什么?
答案 0 :(得分:1)
由于jQuery被加载到页面上下文中,因此只能在那里使用。与页面上下文接口的唯一函数是evaluate
(和其他evaluate
函数)。
所以这一行
console.log($('#link-1').val());
必须在evaluate
回调中。由于您有一个page.onConsoleMessage
事件处理程序,您将从页面上下文中收到控制台消息。
另一件事是在页面加载后添加page.onLoadFinished
事件处理程序没有做任何有用的事情。您可以删除代码周围的处理程序,因为在调用page.open
回调时页面加载已完成。
如果尚未加载#link-1
,则应在静态超时(setTimeout
)之后记录该值或使用waitFor
。