javascript - 网页抓取幻影js的问题?
问题描述
我正在尝试使用phantom.js从网页中抓取 html,但后来出现了这个奇怪的错误。当我运行脚本一次时,我得到了正确的响应,但是当我再次尝试时,我没有得到任何响应。
看起来它永远在加载。我不想打电话phantom.exit()
,因为它会停止服务器。那么,我可能做错了什么?
var page = require('webpage').create(),
server = require('webserver').create();
var service = server.listen(8003, function (request, response) {
console.log('Request received at ' + new Date());
// TODO: parse `request` and determine where to go
page.open('https://www.sportpesa.co.ke/?sportId=1&league=76080&leagueName=la%20liga&top=0',function() {
setTimeout(function() {
var test = page.plainText
console.log(page.plainText);
response.write(page.plainText)
response.close();
page.close();
})
})
});
解决方案
我认为您的问题是您在第一次之后关闭页面,然后尝试再次重用它。根据文档,您不应该这样做
关闭页面并释放与其关联的内存堆。调用后不要使用页面实例。
尝试page
根据每个请求重新创建对象,如下所示:
var webpage = require('webpage'),
server = require('webserver').create();
var service = server.listen(8003, function (request, response) {
console.log('Request received at ' + new Date());
let page = webpage.create()
// TODO: parse `request` and determine where to go
page.open('https://www.sportpesa.co.ke/?sportId=1&league=76080&leagueName=la%20liga&top=0',function() {
setTimeout(function() {
var test = page.plainText
console.log(page.plainText);
response.write(page.plainText)
response.close();
page.close();
})
})
});
推荐阅读
- angular - 如何为 Angular 应用禁用 Firebase 的 404 页面
- c++ - 调用 std::abort 时不执行 Windows 应用程序恢复和重新启动回调
- javascript - 给定营地数组,编写一个返回字符串和匹配数字的函数
- javascript - 如何在javascript的代码片段中添加表格过滤器?
- php - Laravel 通过表单将 0 作为值传递并获取 null
- javascript - 我只是想将输入传递给我的 Js,我做错了什么?
- java - 使用 Firestore 自定义 Rest Api Java 身份验证
- c# - 仅获取发票 ID,仅用于检索发票
- python - 为什么这个 os 循环不会打印出所有文件的完整路径而只给出其中的一些?
- ruby-on-rails - 除了使用 cancan 拒绝访问之外,是否可以引发异常?