- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个简单的网络抓取工具,使用 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");
设置用户代理之前:
设置 Firefox 用户代理后
关于javascript - PhantomJS querySelectorAll().textcontent 不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39632049/
我想我在这里遗漏了一些明显流血的东西,如果有任何帮助,我将不胜感激。提前致谢。 我有以下代码,但是当我运行它时它中断并说 .textContent 不能应用于 queryString 因为 query
我有一个这样的html: My title Here is a text and one paragraph Another paragraph
我的磁盘上有一个 xml 文件,其中包含: _gos='monster.gostats.com';_goa=458628; _got=5;_goi
这个问题已经有答案了: JavaScript closure inside loops – simple practical example (45 个回答) 已关闭 4 年前。 我正在尝试 menu
我有一个表,我想在其中提取事件项目的文本。我使用以下代码执行此操作: var addedWorkout = $("#custDropDownMenuA").find(".dropdown-it
这是我的代码: var text1 = "↵,bla bla";//here text1 has value text1 = text1.textContent;//here it is undefi
我正在尝试创建动画 Logo 灵感:http://codepen.io/pavlunya/pen/OPmVem 当我使用 document.getElementById 而不是 document.ge
var container = document.getElementById("grid-container"); var btn = document.getElementById("btn");
我正在尝试获取出现在父 div 标签上方的 h3 标签的 textContent。代码重复,添加 id 不是 h3 标签的选项。希望在纯 Javascript 中做到这一点。我的 html 目前是..
首先,我正在为 JavaScript 创建一个库,但我不能使用 jQuery。我正在尝试获取 HTML 元素的文本内容,但不包含其子元素的文本内容。 属性 innerText 和 textConten
我正在执行 element.textContent = unescapedData 以将未转义的用户输入放在网站上。攻击者有什么办法可以利用它来做坏事吗?如果它有以下 CSS 吗? max-width
我想使用 JavaScript 设置元素的文本内容。如果我这样做: var el = document.getElementById('my-element') el.textContent = '&
下面是我尝试用来从填充有多个 元素的元素内部获取日期的 JavaScript 代码。第 9 个元素包含 YYYY-MM-DD 格式的日期。当我使用这段代码时,它似乎没有将元素转换为 JavaScrip
我想使用一个使用 JavaScript 的脚本来更新网站页脚中的元素。但是,h3 元素没有更新。 我已经尝试过textContent not updating HTML ,但我无法在那里找到我的解决方
我最近在玩耍,注意到一些涉及 .textContent 的奇怪行为属性(property)。 // I understand that .innerHTML should be used here.
我不知道为什么会这样,但我的替换不起作用。考虑到我的语法是正确的,这有点不寻常。 info.textContent.replace('Title', "replaced"); 其中 info 是存储元
需要: 当按钮的 textContent 溢出它的按钮宽度时,我需要一个触发器。 问题: 是否有任何简洁/巧妙的方法来检测 textContent 何时溢出其父项? Codepen Example 更
早上好, 我希望有人能帮我解决这个看似简单的问题。我不明白为什么我的 textContent 或 innerHTML 不会更新我的 DOM。它在我的控制台中显示它已经改变,但由于某种原因我无法理解为什
我向 mozilla 目录提交了一个 Firefox 插件,但由于以下原因被拒绝: item.innerHTML = '' + ''
给定 firstsecond 和 span + span::before { content: ', '; } 我想在 JavaScript 中检索渲染的字符串 'first, secondary
我是一名优秀的程序员,十分优秀!