我使用phantomJS
从Network
标签中获取所有请求网址,但我还收到了其他不需要的请求。
例如,如果你去marvel.com网络选项卡中有117个请求,我的脚本会返回142个结果,甚至更多......有没有办法只从网络选项卡中获取这117个请求?
这是我的代码:
var urls = ["https://marvel.com"];
var page = require('webpage').create();
var links = "";
var fs = require('fs');
var path = 'TestOutput.txt';
function handle_page(url){
page.open(url,function(){
fs.write(path, links, 'w');
next_page();
});
page.onResourceReceived = function(response) {
if(links.indexOf(response.url) == -1 && response.url.indexOf("http") !== -1) {
links += response.url + '\n';
}
}
links += '\n';
links += '-------------------------------------------------------------------------------------------------';
links += '\n';
}
function next_page(){
var url = urls.shift();
if(!url) {
phantom.exit(0);
}
handle_page(url);
}
next_page();
答案 0 :(得分:0)
不同的浏览器行为不同。 PhantomJS是一个完整的浏览器,与Chrome操作无关。
对于大多数请求,page.onResourceReceived
event handler被触发两次(实际上,如果网络连接没有在中间断开,我遇到的所有请求)。这是因为当第一个数据到达时(response.stage == "start"
)和连接关闭时(response.stage == "end"
),此事件处理程序会被触发一次。
当我们查看数字时,这意味着PhantomJS只能看到大约71个(可能更多一点)的请求。这比Chrome看到的要少得多。原因有点神秘,但似乎很多与广告网站的连接在PhantomJS中被打破。许多广告根本没有加载。这可能有很多原因,但您很可能无法修复它。
您可以使用以下commandline options(为了便于阅读而添加换行符和反斜杠):
--web-security=false \
--local-to-remote-url-access=true \
--ignore-ssl-errors=true \
--ssl-protocol=any