Tag: 噩梦

如何运行。评估,然后在恶梦中多次

我试图废弃由AJAX生成的网页。 在<div class='main'>内的网页上有几个<a class='classLinks'>元素,点击其中一个元素后,内容就会在同一个<div class='main'>和<a class='classLinks'>元素被replace为一个<a class='back'>后退button。 我的任务是抓取点击<div class='main'>内的所有<a class='classLinks'>元素后生成的内容,并将其写入控制台日志。 我把所有的<a class='classLinks'>到select器的数组,但问题是我不知道如何运行序列“ .click, .wait, .evaluate., .click ”里面for循环。 步骤是: goto http://example.com click on subpage get all "a" elements content = "" for (i=0; i < a.lenght; i++) { click on a[i] content = content + div.innerHTML; click on "a.back" } console.log content; 我的代码看起来: var content nightmare […]

如何将Nightmarejs导入到angular-cli组件中

我要用Electron&Nightmare制作GUI刮板。 但是,当我使用电子quickstart中描述的纯html / js,一切运作良好。 但是我想通过使用Anugular2(angular-cli webpack)很好地制作Electron应用程序。 我创build了ng new Scrapper然后为组件创build了一些路线,例如HomeComponent , SettingsComponent 。 我安装噩梦angular度项目文件夹中的npm install –save nightmare ,我想导入它在SettingsComponent如: import {Nightmare} from 'nightmare'; 并使用它像: ngOnInit{ this.nightmare = new Nightmare({ show: true, electronPath: require('node_modules/electron') }) } 我有什么尝试: 1)在index.html中包含 <script src="node_modules/nightmare/lib/nightmare.js"></script> 2)然后在我的组件 declare var Nightmare: any; 3)ngOnInit(){ this.nightmare = new Nightmare({}) 4)获取有关在node_modules/nightmare/lib/*.js丢失其他js文件的错误 码: index.html <!doctype html> <html> <head> <meta […]

噩梦/电子:导航错误(代码 – 118)

刮噩梦直到最近一直是一件轻而易举的事情,我开始遇到错误,没有任何细节,标题“导航错误”和错误代码118,如下所示。 { [Error: navigation error] '0':{message:'navigation error',code:-118,details:'',url:' http : //markets.ft.com/research/Browse-Companies '},长度:1,错误:[ {message:'navigation error',code:-118,details:'',url:' http : //markets.ft.com/research/Browse-Companies '}]} 我的噩梦代码(Node.Js): function *run(){ var nightmare = Nightmare({show : true }); nightmare.useragent("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36") var url = "http://markets.ft.com/research/Browse-Companies"; var industry = []; //fetching data in { INDUSTRY , LINK , SECTOR } […]

NightmareJS – Web爬虫需要遍历JSON数据

我正在构build一个涵盖200多个网站的networking爬虫。 当前的代码已经运行在由十几个站点构build的外部JSON文件的顶部。 样品: [ { "company": "My Company", "url": "http://example.com/jobs/", "query": "div.job-listings>dt a", "link": "div.job-listings>dt a" }, { "company": "Another Company", "url": "http://anothercompany.com/careers/", "query": ".clearfix~ .col-sm-6+ .col-sm-6 a , .col-sm-6:nth-child(4) a", "link": ".clearfix~ .col-sm-6+ .col-sm-6 a , .col-sm-6:nth-child(4) a" } ] 当我尝试asynchronous。每个它会logging所有的原始对象在函数的顶部,然后尝试进入噩梦实例然后返回error Nothing responds to "goto" 。 然后我尝试了asynchronous .eachSeries,打印出正确的结果,但在第一次迭代后停止。 var async = require ('async'); var […]

如何用恶梦的JavaScript函数执行一个HREF点击

我想知道如何点击与这个属性的噩梦button。 <a class="auth_button leftbtn" href="javascript:SubmitAuthCode( 'enter a friendly name here' );"> <h3>Submit</h3> <h5>my special access code</h5> </a> 我试图使用这样的click()方法: .click('.auth_button leftbtn'); 但它只是不点击它(可能是因为它不是一个“真正的”button – 可能是错的) 任何想法为什么?或者我应该怎么做,而不是 我可能会发现为什么.click()不起作用: <div class="modal_buttons" id="auth_buttonsets"> <div class="auth_buttonset" id="auth_buttonset_entercode" style="display: none;"> <a class="auth_button leftbtn" href="javascript:SubmitAuthCode( 'enter a friendly name here' );"> <h3>Submit</h3> <h5>my special access code</h5> </a> <a class="auth_button" href="javascript:SetEmailAuthModalState( 'checkspam' );"> <h3>What […]

无法使用phantomJS获取iframe的元素

我正在寻找一种方法来控制文档中的元素。 问题是,该文件被附加到一个iFrame。 这是一个例子: .goto('https://wirecard-sandbox-engine.thesolution.com/engine/hpp/') .use(iframe.withFrameName('wc', function (nightmare) { nightmare .type('#account_number', accountNumber) .screenshot(resultfolder + '\\06-Card-Number.png') .type('#card_security_code', testData.securityCode) .selectIndex('#expiration_month_list', 1) .selectIndex('#expiration_year_list', 4) .click('span[id="hpp-form-submit"]') })) 我在上面要做的是: 获取与url的iFrame。 使用这个来获得对iFrame中每个元素的控制。

Nightmare.js条件浏览

我试图了解如何使用“if-then”逻辑来制作nightmare.js脚本。 例如 var Nightmare = require('nightmare'); var nightmare = Nightmare({ show: true, paths: { userData: '/dev/null' } }); nightmare .goto('http://www.example.com/') .wait('h1') .evaluate(function() { return document.querySelector('title').innerText; }) // here: go to url1 if title == '123' otherwise to url2 .end() .then(function() { console.log('then', arguments); }).catch(function() { console.log('end', arguments); }); 如何根据评估结果将这个脚本转到不同的url?

dynamic分页与噩梦/电子(页面刮)

我正在尝试用Nightmare / Electron来抓取dynamic分页网站。 我没有看到一种方法来执行一个do …直到与噩梦function或链接评估调用与逻辑的方式。 下面是一个简单的代码示例,仅仅使用Google语句并从第1页返回结果hrefs。我希望代码能够在结果中的每个页面上继续。 var Nightmare = require('nightmare'); var vo = require('vo'); vo(function* () { var nightmare = Nightmare({ show: true }); var links = yield nightmare .goto('http://www.google.com') .wait('input[title="Search"]') .click('input[title="Search"]') .type('input[title="Search"]', 'Anequim Project') .click('input[name="btnK"]') .wait(600) .evaluate(function(){ var linkArray = []; var links = document.querySelectorAll('h3.r a'); for (var i = 0; i < links.length; […]

我怎样才能将callback传递给我传递给“vo”库的生成器?

我想了解callback是如何工作的,所以我创build了一个函数,并且传递了第二个名为“callback”的参数,我使用“callback(arr)”在函数结尾处调用该函数。 不过,我收到一个错误,说:“callback是不是一个function”? 你能告诉我我做错了什么吗? UPDATE vo是一个nodejs库,它使用一个生成器函数*()并运行所有的yield。 这基本上是一个处理asynchronous代码,lesscallback的方法(是的,我知道我也使用了callback,但这是一个很好的select)。 一个更受欢迎的图书馆,做同样的事情是合作。 链接到vo: https : //github.com/matthewmueller/vo var Nightmare = require('nightmare'); var vo = require('vo'); function* MyFunction(query, callback) { arr = []; for (i = 0; i < 1; i++) { arr.push(yield Nightmare({ show: true }).goto(`http://google.com`) .inject('js', 'jquery-3.1.0.js') .evaluate(() => { var title; title = 1 extend = 2 var img; […]

通过Nightmare.js在linux服务器上无线运行电子(primefaces壳)

我正在构build一个刮板,使JS单页应用程序容易抓取。 在PhantomJS (内存泄漏,过时的webkit,不死的进程,以及许多其他问题)之后,我决定改用NightmareJS ,它可以做同样的事情,但是使用Electron 。 电子有很多优点(使用最新的铬 ,速度要快得多),但它需要一台X服务器才能运行。 因为我需要在Ubuntu服务器下工作,所以我遵循了这个要求 。 现在我有一个很棒的EC2实例,一切准备好运行一个无头电子 xvfb-run electron 关键是我需要通过nightmareJS(我将在一个node.js服务器脚本中使用)来运行。 我想知道如何将parameter passing给恶梦,以便通过svfb启动电子