问题标签 [nightmare]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3065 浏览

javascript - 使用 Nightmare / Electron 进行动态分页(页面抓取)

我正在尝试使用 Nightmare / Electron 抓取动态分页网站。我看不到一种执行操作的方法...直到使用噩梦功能或使用逻辑链接评估调用的方法。

这是一个简单的代码示例,它只搜索一个短语并从第 1 页返回结果href。我希望此代码在结果中的每一页继续。

0 投票
4 回答
8083 浏览

javascript - Nightmare.js 在 Ubuntu Linux 云服务器上无法正常工作

我似乎无法让 nightmare.js 在 Ubuntu Linux 14.04 服务器上工作 [通过 DigitalOcean]。

我已经安装了 PhantomJS (1.9.8) 和 Node (4.2.4),据我所知它们运行良好。

例如,当我运行这个时:

使用 loadspeed.js 包含以下内容:

我得到以下输出:

但是,当我尝试运行一个简单的噩梦时:

hello_nightmare.js 包含以下内容:

我没有任何输出;感觉就像我只是在命令行上按了“Enter”。

我还尝试了噩梦 github 站点上的示例:

hello_nightmare_main.js 包含以下内容:

它仍然不起作用。

我该如何解决这个噩梦?

0 投票
1 回答
606 浏览

javascript - 将参数传递给生成器,vo

我正在尝试使用 nightmare js 抓取整个页面并将结果返回给调用函数。为此,通过扩展噩梦示例,我将参数传递给生成器函数。由于我不明白的原因,run() 函数永远不会被调用。

谢谢你的帮助。

0 投票
1 回答
205 浏览

javascript - VO、Generators、Promises 和返回对象的交互。

我试图了解噩梦和 vo 是如何相互作用的。请在下面找到噩梦页面的(几乎)原始示例。

谁能给我一个提示如何找出发生的事情的顺序,即

  • 为什么生成器函数需要 yield 和 return 语句才能使代码工作
  • vo / nightmare 如何自动触发收益率以使序列合理工作。背景是,我想知道何时将收益放在哪里,但是这里的收益语句似乎除了实际触发等待之外没有做任何其他事情。以我目前的知识,我可以在调用“.goto()”和“.end()”时复制示例并“等待”。

不幸的是,噩梦文档没有说明它的设计是如何工作的(与承诺和生成器的交互)。

如果有人能想到一个示例,如何手动解决 run() 承诺并触发所有 .next() 使生成器功能按预期工作所必需的,这已经是一个很大的帮助。

谢谢 !

0 投票
0 回答
549 浏览

node.js - 使用 NightmareJS 登录后如何获取弹出窗口的屏幕截图

我正在尝试使用 Nightmare.js 获取两个不同页面的两个屏幕截图。在第一页上,我需要登录,然后,该页面会触发一个弹出窗口,其中包含有关用户的一些信息。

问题是即使登录成功,我也无法获得第二个屏幕截图。

这是我的代码:

它需要在 NodeJS 中运行。

0 投票
1 回答
3381 浏览

node.js - 发送 keydown,在 nightmare.js 中键入 keypress

nightmare.js 中的 Type 方法将文本分配给输入控件的 value 属性。由于此实现 keydown,keypress 事件不会在您尝试抓取的页面上触发。有什么方法可以在“类型”之后发送 keydown 事件?

编辑 1-

这是一个使用 jQuery 发送事件的示例,它也不起作用 -

编辑 2-

使用 unicode 等效键作为类型方法的参数会以某种方式调用附加事件,不完全确定这个 hack 是如何工作的,但它确实有效!

这是工作示例-

0 投票
1 回答
1814 浏览

javascript - 在 nightmare.js 中循环 url 时的异步挑战

我正在使用 async 模块使用 nightmarejs 迭代多个 url。我无法创建新的噩梦实例,因为我每次都必须重新进行身份验证。

所以我正在尝试使用异步模块。我遇到了一个(我认为是经典的)问题,所有迭代的 url 都是数组中的最终 url——而不是每个单独的 url。我认为使用异步模块可以解决这个问题(我也尝试过使用 let)但我仍然遇到问题

感谢您的任何建议

0 投票
1 回答
3932 浏览

javascript - 如何在 nightmare.js 中运行多个评估方法?

我正在使用 nightmare.js 来抓取网页内容。

在验证了 nightmare 实例之后,我遍历了多个页面(需要登录),然后调用 run 方法来执行所有页面加载。

我想从每个页面中获取特定内容,因此我调用了评估函数,以确保我们在浏览器范围内执行。从评估函数返回的任何内容都将成为 run 方法中的参数

但我试图多次运行评估函数(每页一次)。但是evaluate函数只能将输出返回给run方法一次。我尝试将内容推送到全局变量(在主范围内),但无法从浏览器范围内访问它。

谁能建议如何在一个噩梦实例上运行多个评估方法并从每个实例中提取信息?

0 投票
1 回答
1692 浏览

node.js - 如何使用 Promise 和 vo.js 返回 Hapi 回复

我有一个异步的 nightmare.js 进程,它使用带有生成器的vo.js流控制:

这需要通过接口向 Hapi (v.13.0.0) 返回一个承诺reply()。我已经看到了 Bluebird 和其他 Promise 库的示例,例如:如何从 hapi.js 路由处理程序外部回复,但在调整 vo.js 时遇到问题。有人可以提供一个例子吗?

服务器.js

scrape.js

0 投票
2 回答
850 浏览

node.js - 用承诺包装噩梦/一次处理一个网址

我正在尝试使用nightmarejs从几个网站上抓取信息。我遇到的问题是,我只想一次打开一个窗口并等待它关闭,然后再处理下一个 url。

现在 findByid:

关于如何实现这一目标的任何建议?我想findById在 while 循环中执行每个。