Tag: phantomjs

如何使用Phantomjs评估从文档返回任何东西?

我正在使用这个phantomjs 软件包 ,因为我想和节点一起使用幻影。 我的目标是从给定网页上给定的位置获取元素。 我所做的一切,我总是得到null , 空string或Promise {} 基本上这里是我的代码: var phantom = require('phantom'); var sitepage; var url = "http://amazon.com"; phantom.create().then(function(ph){ return ph.createPage(); }).then(function(page){ var pageWidth = parseInt("1920px", 10); var pageHeight = parseInt(pageWidth * 3/4, 10); sitepage = page; sitepage.property('settings', {loadImages: false}); sitepage.property('viewportSize', { width: pageWidth, height: pageHeight }); return sitepage.open(req.query.url); }).then(function(status){ if (status == "success") […]

PhantomJS持久性cookies和Javascript

我一直在挣扎着大部分时间。 简而言之,我试图通过Node.js模块与PhantomJS一起loginAmazon。 我的问题的简短版本是,亚马逊给我一个消息,说需要cookies来使用该网站。 这是我目前的资源… NPM的幻影模块 使用PhantomJSloginAmazon的工作示例 这个问题解决PhantomJS中的永久性Cookie 另一个关于由Javascript设置的cookies的SO问题 最后一个问题是特别有趣的,因为第一个答案是针对用户代理(我已经尝试了至less3或4个结果相同),而第二个答案指向了我认为可能是我的问题。 简而言之,亚马逊可能试图通过JavaScript设置testingcookie,然后检查cookie是否设置成功,以确定用户是否允许cookie。 我可以成功地确认我的cookie文件正在被创build,并且Amazon已经在文件中设置了cookie,但是当提交login表单时,这些似乎并不足够,因为在下一页我被cookie警告阻止了。 这导致我相信在这最后一个问题的用户是正确的 – 我的网页的JavaScript不会解雇,尽pipe试图确保它是。 最后,我的page.render显示了一条亚马逊消息,说我需要启用cookie才能继续。 这是我的代码… 'use strict'; /** * Module dependencies. */ var mongoose = require('mongoose'), phantom = require('phantom'), // Admin = mongoose.model('Admin'), Item = mongoose.model('Item'), config = require('../config/config'); /* * Check function. */ module.exports.check= function() { var loadInProgress = false, interval = '', […]

与NightmareJS的asynchronous问题

我正在尝试使用nightmarejs来构build一个脚本,这个脚本可以一次又一次地点击一个button,就像在评论部分底部的那个button一样,每次按下它时都会载入较旧的评论(例如:youtube.com/观看?v = pZISJqJbQuU&list = RDpZISJqJbQuU#t = 3),并在没有更多button被点击时停止。 我曾尝试调用评估,只为end()方法先被调用,并取消进程。 我已经尝试使用setTimeout,setInterval,然后(),将循环转换为recursion。 每次评估()都会完成它的工作,但是在完成工作之前不能退出(只是挂起)或者退出,因为和end()的竞争条件。 有没有经验丰富的nightmarejs用户? function youtube_button_clicker(group) { var nightmare = Nightmare({ show: true }); nightmare .goto(url) .inject('js', 'jquery-3.1.0.js') .then( () => nightmare. evaluate(function() { for (i=0;i>LEN;i++) { setTimeout(() => { $(button_element).click() }, i * 2000); } return "done" })) .catch(function (error) { console.error('Search failed:', error); }); } 删除.end()方法并挂起,重新放置.end(),并跳过该过程 […]

如何设置黄瓜环境variables

我有以下package.json: { "name": "newcucumber", "version": "1.0.0", "main": "index.js", "scripts": { "test": "./node_modules/.bin/cucumber-js", "firefox": "./node_modules/.bin/cucumber-js — –profile.desktop.env.browser ff" }, "author": "", "license": "ISC", "dependencies": { "chromedriver": "^2.24.1", "cucumber": "^1.3.0", "firefox-profile": "^0.4.2", "geckodriver": "^1.1.2", "phantomjs-prebuilt": "^2.1.12", "selenium-webdriver": "^3.0.0-beta-2" } } 我运行程序使用: npm test 我想为黄瓜设置一个环境variables,以便我可以从命令行运行: npm test firefox或者npm test phantomjs 。 它也可以作为package.json“脚本”的一部分,如上所述,但我不确定是否正确。 调用npm run-script firefox 如何实现它,以便在js代码中,像world.js或browser.js,我抓住envvariables?

将脚本元素添加到DOM而不执行它

我正在创build一个读取HTML文件的节点脚本,将其作为DOM文档进行处理,然后将其序列化回另一个文件。 我现在正在使用jsdom 。 我需要做的一个操作是添加一个<script>元素,其JavaScript代码将对DOM进一步操作。 问题是,只要我将脚本添加到jsdom节点,jsdom就会运行它,并且第二个操作阶段立即完成,因此输出HTML是错误的。 我以为这只会发生在PhantomJS,而不是jsdom,但我错了。 我没有使用jsdom的特殊约束,我可以切换到PhantomJS或其他任何东西,但是我需要生成一个HTML文件,并且在执行我的Node程序时不需要运行脚本就添加了脚本。 有没有办法做到这一点?

当提交大值时,casperjs empy POST数据

我有一个加载的表单,我只是简单地提交表单。 在表单中有inputtypes=隐藏字段,其中存有一些长string。 这在正常的浏览器上正常工作,不能用casper。 在分析这个,apache本身是从casper获得空的POST数据。 如果我减less隐藏的input数据,它工作正常。 是否有尺寸限制或casper中定义的东西? 以下是代码: var casper = require('casper').create(); casper.start('http://localhost/loadForm', function() { // Wait for the page to be loaded this.waitForSelector('form[action="/saveConfig"]'); }); casper.then(function() { this.evaluate(function() { $('#form').submit(); }); }); casper.run();

使用casperjs / phantomjslogging到Amazon Developer网页

我有一个问题,试图用CasperJSlogin到亚马逊开发者网页 – 电子邮件和通过成功input,但在“login”button单击,我收到一条消息,input一个有效的电子邮件(和我的电子邮件是有效的 – 我手动成功login)。 试图login到Facebook,它使用了几乎相同的代码。 我使用了这个网站的代码: http : //code-epicenter.com/how-to-login-to-amazon-using-casperjs-working-example/ 谢谢!

如何使用NightmareJS进行多个查询?

下面的Javascript是打算使用NightmareJS来search一个网站的3个职位,并返回谁上传的职位的用户名。 var Nightmare = require('nightmare'); var nightmare = Nightmare({ show: true }); var inputArray = [198,199,201]; var runNext = function (i) { nightmare .goto('http://theshitpit.com/goto.php') .insert('form [name=postnum]', i) .click('form [type=submit]') .wait() .evaluate(function () { return document.querySelector('.username').innerHTML }) .end() .then(function (result) { console.log(result) }) .catch(function (error) { console.error('Search failed:', error); }); } var index = 0; while(index<inputArray.length){ […]

在casper方法之后从函数返回值

在下面的代码中,我想调用checkMainBox(cthis) 。 我想设置它,使这个函数将返回检索的数字或错误。 但在checkMainBox()我不知道如何返回一个值。 数字返回undefined。 我很确定我不能这样做,因为asynchronous行为,但下一个最好的方法是什么? function checkMainBox(cthis){ var number; cthis.waitForSelector("._XWk", function(){ cthis.capture("result.png"); cthis.then(function(){ var number = cthis.evaluate(function(){ return $("._XWk").txt(); }) // console.log("number", number); }) }) return number } function getPhoneNumber(cthis){ console.log("NUMBER::", checkMainBox(cthis)); //checkMainBox(cthis) should return false or the number } casper.on("error", function(msg){ this.echo("error: " + msg, "Error"); }) casper.on("page.error", function(msg, trace){ this.echo("Page Error: " […]

在加载后几秒钟内检索页面的html内容

我在nodejs中编写脚本来自动从联机目录中检索数据。 知道我从来没有这样做,我select了JavaScript,因为它是我每天使用的语言。 因此,我从几个技巧,我可以find在谷歌使用请求与cheerios轻松访问页面的dom组件。 我发现并检索了所有必要的信息,唯一缺less的步骤是恢复到下一个页面的链接,除了在页面加载4秒后生成一个链接并且链接包含散列以便这一步骤是不可避免的。 我想要做的是在加载后4-5秒钟恢复dom,以便能够恢复链接 我在网上看了一下,还有很多build议使用PhantomJS进行这个操作,但是经过多次尝试后,我无法让它工作。 这是我的代码: #!/usr/bin/env node require('babel-register'); import request from 'request' import cheerio from 'cheerio' import phantom from 'node-phantom' phantom.create(function(err,ph) { return ph.createPage(function(err,page) { return page.open(url, function(err,status) { console.log("opened site? ", status); page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', function(err) { //jQuery Loaded. //Wait for a bit for AJAX content to load on the page. Here, we are […]