Tag: 恶梦

然后在()后面调用evaluate()

考虑下面的代码片段: nightmare .evaluate(function (resolve){ setTimeout(function () { resolve(null, 1234); }, 1500) }) .then(function (result) { console.log('SUCCESS', result); }) .catch(function (e) { console.log('ERROR', e); }); 假设之前已经初始化了nightmare实例,我还使用了goto()和inject() (这部分代码非常巨大,但是如果需要,我可以尝试清理它以呈现在那里)。 但是我终于得到的结果 – 不是SUCCESS 1234而是SUCCESS 1234 。 我正在做这个实验,并且已经理解,如果在.evaluate() .wait(15000)之前调用.wait(15000) (或者在.evaluate()之后和.evaluate()之前设置一个断点并等待一些时间被触发)代码正如预期的那样工作。 那个代码有什么问题?

自动化ajax生成的网站与噩梦

我使用恶梦来自动化一个网站。 到目前为止,这是非常棒的,但我注意到,当我想与dynamic加载的内容进行交互时,会遇到一些问题。 甚至有一种方法,等待一个元素出现在页面上.wait(#elementId) ,但它不适用于在飞行中生成的内容。 有人遇到过这个问题,或者你可能会推荐一些其他技术? 我喜欢的噩梦是,它实际上并不是无头的,通过与Electron的集成,它也有一个GUI,显示所做的一切。 我宁愿如果这是可能的。 编辑 为了更好地说明我的担忧,下面是我正在使用的代码,但抽象: 假设我想在https://www.google.com上进行search,但search表单是通过库dynamic生成的。 我的代码看起来像这样 vo(function* () { var nightmare = Nightmare({ show: true }); var search = yield nightmare .goto('https://google.com') .wait('input[name="search"]') .type('input[name="search"]', 'the term I am searching for') .click('#submitButton') .wait(2000) .evaluate(function () { return $('input[name="search"]').val(); }); yield nightmare.end(); return search; })(function (err, result) { if (err) return console.log(err); […]

Heroku上的Nightmare.JS导致超时

我正在build立一个网站,当人们将他们的凭据放入URL的请求部分的网站中时,它会将其login到该网站并发回有关其帐户的数据。 在本地testing这个代码不会产生错误,而且发生得相当快 我不确定是什么原因导致它在服务器上超时而不是在本地。 这是来自heroku logs的日志文件 2016-05-27T05:03:02.884921+00:00 heroku[slug-compiler]: Slug compilation finished 2016-05-27T05:03:02.884910+00:00 heroku[slug-compiler]: Slug compilation started 2016-05-27T05:03:02.853598+00:00 heroku[web.1]: Restarting 2016-05-27T05:03:02.854287+00:00 heroku[web.1]: State changed from up to starting 2016-05-27T05:03:05.766040+00:00 heroku[web.1]: Stopping all processes with SIGTERM 2016-05-27T05:03:08.021294+00:00 heroku[web.1]: Starting process with command `node server.js` 2016-05-27T05:03:10.308664+00:00 app[web.1]: Node app is running on port 54574 2016-05-27T05:03:11.710569+00:00 heroku[web.1]: State changed from […]

克隆和nightmarejs

我无法用nightmarejs来运行我的cron。 函数get_data()的第一次迭代很好,但之后cron重新启动,函数不会再被触发。 “抓取结束”也不会被logging。 你知道我的代码有什么问题吗? 日志 1 cron data fetched 2 cron 3 cron – var Nightmare = require('nightmare') var nightmare = Nightmare({ typeInterval: 300, show: true, executionTimeout: 120000, gotoTimeout: 120000 }); let data = "" – var get_data = function(){ return new Promise(function(resolve, reject) { nightmare .goto('https://url.com') .type('[name=email]', '') .wait(1000) .type('[name=email]', 'myemail') .wait(1000) .type('[name=password]', '') […]

NodeJS:如何做docker应用程序的nightmareJS e2etesting

我正在创build一个Docker镜像/容器,用于从我的高效构build应用程序(nodeJS应用程序)进行testing。 现在我想用摩卡/柴和噩梦做一些e2etesting。 所以我创build了一个非常基本的testing文件。 我的问题是现在如何testing正在运行的应用程序。 所以我想“加载”应用程序 – goto http://localhost – check if login form is existing – do login – check if login was successful 我不知道如何在我的docker image / e2e.js文件中做到这一点… 这是我如何创builddocker图像: Dockerfile # Use the production image as base image FROM productive_build:latest # Copy the test files COPY e2e.js / # Override the NODE_ENV environment variable to […]

使用没有ES6语法和良率的Nightmare.js

我使用nightmare.js构build了一个简单的节点脚本来抓取网站 var Nightmare = require('nightmare'); var vo = require('vo'); vo(run)(function(err, result) { if (err) throw err; }); function *run() { var x = Date.now(); var nightmare = Nightmare(); var html = yield nightmare .goto('http://google.com') .evaluate(function() { return document.getElementsByTagName('html')[0].innerHTML; }); console.log("done in " + (Date.now()-x) + "ms"); console.log("result", html); yield nightmare.end(); } 我想在一个使用较旧版本的节点的环境中运行这个不支持ES6function的节点。 在github页面上没有关于如何做这个没有“yield”关键字的例子。 我在这里find了一个没有使用ES6语法的用法示例: 带有噩梦的网页浏览 […]