【问题标题】:cannot return document.querySelector with nightmare API on node.js无法在 node.js 上使用噩梦 API 返回 document.querySelector
【发布时间】:2017-01-04 07:32:03
【问题描述】:

我在中国电子商务网站淘宝(www.taobao.com/)上使用nightmare.js 编写网页脚本。目标是获取产品信息。该代码与yahoo example code 非常相似,但结果始终为空。我尝试将 console.log 进行调试,并意识到错误可能出在 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);
  });

【问题讨论】:

  • 刚刚尝试访问该网站并搜索hello kitty,.. 那里没有.row 甚至.row-2 类。但是如果我这样做 document.querySelectorAll('.item') 这将给你页面上的所有产品,如果那是你想要的。
  • 使用 screenshot() 查看执行评估时目标页面上呈现的内容。如果您尝试读取的元素是否存在,这应该可以让您清楚地了解。

标签: javascript node.js cloud9-ide nightmare


【解决方案1】:

首先:仔细检查您的选择器并确保它们存在。

撇开这些不谈,问题在于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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2022-06-29
    • 1970-01-01
    • 2010-12-21
    • 2020-03-14
    • 2010-11-13
    • 2010-12-22
    相关资源
    最近更新 更多