无法使用node.js上的恶梦API返回document.querySelector
问题描述:
我正在使用nightmare.js在中国电子商务网站taobao(www.taobao.com/)上进行网页脚本编写。目标是获取产品信息。该代码与yahoo example code非常相似,但结果始终为空。我试图把console.log调试,并意识到可能存在于querySelector中的错误。 下面是如果有人有时间去看看的代码。真的很感激它。无法使用node.js上的恶梦API返回document.querySelector
var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });
nightmare
.goto('https://www.taobao.com')
.type('form[action*="/search"] [name=q]', 'hellow kitty')
.click('form[action*="/search"] [type=submit]')
.wait(2000)
.evaluate(function() {
return document.querySelector('.row.row-2.title a')
})
.end()
.then(function (result) {
console.log(result)
})
.catch(function (error) {
console.error('Search failed:', error);
});
答
首先和最重要的是:仔细检查您的选择器,并确保它们存在。
设置不谈,问题在于return document.querySelector('.row.row-2.title a')
。 DOM列表(如从document.querySelector
返回的列表)不能很好地序列化。请返回前拉你想要的结果 - 说你从锚想要的HREF中,你可以做这样的事情(从髋关节):
return Array.from(document.querySelector('.row.row-2.title a')).map(a=> a.href);
只是试图去那个网站,做一个搜索'凯蒂猫',..没有什么与'.row'甚至'.row-2'类。但是,如果我做'document.querySelectorAll('。item')'这会给你所有的产品在页面上,如果这是你的事后。 – Keith
使用截图()查看执行评估时在目标页面上呈现的内容。如果你正在尝试阅读的元素是否存在,那么这应该给你一个公平的想法。 –