gpt4 book ai didi

javascript - PhantomJS querySelectorAll().textcontent 不返回任何内容

转载 作者:行者123 更新时间:2023-12-03 06:04:01 25 4
gpt4 key购买 nike

我创建了一个简单的网络抓取工具,使用 phantomjs 从网站抓取数据。当我使用 querySelectorAll 获取我想要的内容时,它对我不起作用。这是我的完整代码。

 var page = require('webpage').create();

var url = 'https://www.google.com.kh/?gws_rd=cr,ssl&ei=iE7jV87UKsrF0gSDw4zAAg';

page.open(url, function(status){

if(status === 'success'){

var title = page.evaluate(function(){
return document.querySelectorAll('.logo-subtext')[0].textContent;
});

console.log(title);
}
phantom.exit();
});

请帮我解决这个问题。

真的谢谢。

最佳答案

默认情况下,PhantomJS 的虚拟屏幕尺寸为 400x300。

var page = require('webpage').create();
console.log(page.viewportSize.width);
console.log(page.viewportSize.height);

400
300

有些网站注意到了这一点,它们提供了 HTML 和 CSS 的移动、剥离版本,而不是您在桌面浏览器中看到的正常版本。但我们可以通过设置所需的视口(viewport)大小来解决这个问题:

page.viewportSize = { width: 1280, height: 800 };

还有一些网站会进行用户代理嗅探并据此做出决策。如果他们不知道您的浏览器,为了安全起见,他们可以显示移动版本,或者如果他们不想被抓取,他们可以拒绝与 PhantomJS 的连接,因为它诚实地声明了自己:

console.log(page.settings.userAgent);

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1

但是我们可以设置所需的用户代理:

 page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0';
<小时/>

在处理如此脆弱的东西和网络抓取时,您真的应该注意您可能收到的任何错误和系统消息。

所以 PhantomJS 脚本不应该没有 onError 和 onConsoleMessage 回调:

page.onError = function (msg, trace) {
var msgStack = ['ERROR: ' + msg];
if (trace && trace.length) {
msgStack.push('TRACE:');
trace.forEach(function(t) {
msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function +'")' : ''));
});
}
console.log(msgStack.join('\n'));
};

page.onConsoleMessage = function (msg) {
console.log(msg);
};

PhantomJS 脚本调试的另一个重要技术是制作屏幕截图。您确定 PhantomJS 能看到您在 Chrome 中看到的内容吗?

 page.render("google.com.png");

设置用户代理之前:

screenshot with native PhantomJS useragent

设置 Firefox 用户代理后

after setting Firefox useragent

关于javascript - PhantomJS querySelectorAll().textcontent 不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39632049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com