html open多个链接,javascript – 在一个脚本中使用多个page.open

您使用递归打开多个页面的想法是正确的,但是您遇到了一些问题.

出口

正如您所正确指出的,您遇到了phantom.exit()的问题.由于page.open()和setTimeout()是异步的,因此只需在完成后退出.当您在脚本末尾调用phantom.exit()时,您将在第一页加载之前退出.

只需删除最后一个phantom.exit(),因为您已经在正确的位置有另一个出口.

页面上下文

page.evaluate()提供对DOM上下文(页面上下文)的访问.问题是它是沙箱.在该回调内部,您无法访问外部定义的变量.您可以显式传递变量,但它们必须是原始对象,而页面则不是.您只需访问page.evaluate()内的页面即可.你需要在调用page.evaluate()之前注入jQuery.

您通过不更改文件名来覆盖每次迭代中的文件.您需要更改文件名或使用附加模式’a’而不是’w’.

然后,当您只想写一次时,您不需要打开流.更改:

var file = fs.open('new_test.txt', "w");

file.write(html + '\n');

file.close();

fs.write('new_test.txt', html + '\n', 'a');

递归步骤

调用next_page()函数的递归步骤要求您传入URL.由于url已经是一个全局变量,并且您在每次迭代中都更改它,因此您无需传入URL.

您也不需要添加setTimeout(),因为在page.open()回调内部之前的所有内容都是同步的.

修正脚本

//...

var urls = [/*....*/];

function handle_page(url){

page.open(url, function(){

//...

page.injectJs('jquery.min.js');

var html = page.evaluate(function(){

// ...do stuff...

return $('body').html();

});

//save to file

fs.write('new_test.txt', html + '\n', 'a');

console.log(html);

next_page();

});

}

function next_page(){

var url = urls.shift();

if(!url){

phantom.exit(0);

}

handle_page(url);

}

next_page();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值