我想知道如何在phantomjs中解析JSON.任何页面内容都包含在html(<html><body><pre>{JSON string}</pre></body></html>)中.是否有选项可以删除封闭标签或要求不同的Content-Type为"application/json"?如果没有,解析它的最佳方法是什么.是否在使用includeJS jQuery后使用jQuery?
通过casperjs文档我无法找到从客户端javascript中看到console.log的位置.这可能吗?
我正在评估phantom.js和zombie.js.我期望权衡是幻影有更广泛的文档支持(因为它使用真实的渲染器),而僵尸更快(因为没有使用渲染引擎).然而僵尸似乎在我做的测试中慢得多.这有意义吗?
我想也许zombie在visit()返回之前等待整页加载(包括运行所有脚本和加载css),而phantom在start()之后立即返回(我使用了casperjs),允许我继续而不等待整页.
Phantom.js
casper.userAgent("Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13");
casper.test.begin('bing search', 2, function(test) {
casper.start('http://www.bing.com/', function() {
this.waitUntilVisible('#sb_form_q', function() {
this.sendKeys('#sb_form_q', "book", true);
this.click('#sb_form_go');
this.waitUntilVisible('#count', function() {
var val = this.evaluate(function() {
return document.getElementById('count').innerText
});
console.log(val)
});
});
}).run(function() {
test.done();
});
});
Run Code Online (Sandbox Code Playgroud)
Zombie.js
var Browser = require("zombie");
var browser = new Browser()
browser.userAgent = "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13"
browser.visit("http://www.bing.com/", function() { …Run Code Online (Sandbox Code Playgroud) 我一直在努力使用PhantomJS/Selenium/python-selenium将文件下载到文件系统.我能够轻松浏览DOM并单击,悬停等.然而,下载文件非常麻烦.我尝试过使用Firefox和pyvirtualdisplay的无头方法,但这种方法效果不佳,而且速度令人难以置信.我知道CasperJS允许文件下载.有谁知道如何将CasperJS与Python集成或如何利用PhantomJS下载文件.非常感激.
我们正在运行测试使用karma和phantomjs 上周,我们的测试神秘地开始崩溃phantomJS,错误为-1073741819.
基于此线程,Chutzpah似乎代码表明PhantomJS的本机内存故障.
经过进一步调查,我们一直看到幻像在750MB左右的内存中崩溃.
有没有办法配置Karma,以便它不会遇到这个限制?或者告诉它冲洗幽灵的方法?
到目前为止,我们只进行了大约1200次测试 我们大约是项目的1/4,因此5000个UI测试似乎不可能.
我正在尝试使用带有恶作剧的水豚来登录亚马逊这个网址...
https://developer.amazon.com/rp/sales.html
Run Code Online (Sandbox Code Playgroud)
很简单,除了当我尝试提交表单时,我收到错误... ReferenceError:找不到变量:jQuery ...
但是,jQuery的源代码在页面中,应该已经加载了.
我用来登录的代码就是这个......
visit "https://developer.amazon.com/rp/sales.html"
fill_in('ap_email', with: user)
fill_in('ap_password', with: password)
click_on('signInSubmit-input')
Run Code Online (Sandbox Code Playgroud)
提交触发javascript调用以验证输入.这使用jQuery,当它发生时,会抛出错误.
我期望当我访问登录页面时,该jquery将被加载到该页面上的其他javascripts.
我不知道为什么在这一点上不会加载jQuery.Phantomjs会加载页面并加载页面中引用的jQuery,不是吗?
时间问题? - 访问后增加睡眠.
配置问题?
我目前的配置
include Capybara::DSL
Capybara.default_driver = :poltergeist
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, phantomjs: Phantomjs.path)
end
Capybara.ignore_hidden_elements = false
Run Code Online (Sandbox Code Playgroud)试图强制jQuery加载
Capybara::Poltergeist::Driver.new(app,
phantomjs: Phantomjs.path,
extensions: ["handlers/jquery.js"])
Run Code Online (Sandbox Code Playgroud)我尝试了很多事情试图让我了解正在发生的事情,但我是空洞的.
任何关于我可能会在哪里或可能会发生什么的想法都将不胜感激.
如何在一个页面中读localhost入无头的Jasmine规范,以便测试用例可以在DOM元素上工作?
我的Gulp任务成功运行Jasmine规范进行单元测试,现在我需要构建集成测试来验证所提供的完整网页localhost.我正在使用该gulp-jasmine-browser插件运行PhantomJS.
例:
gulpfile.js
var gulp = require('gulp');
var jasmineBrowser = require('gulp-jasmine-browser');
function specRunner() {
gulp.src(['node_modules/jquery/dist/jquery.js', 'src/js/*.js', 'spec/*.js'])
.pipe(jasmineBrowser.specRunner({ console: true }))
.pipe(jasmineBrowser.headless());
}
gulp.task('spec', specRunner);
Run Code Online (Sandbox Code Playgroud)
规格/车,spec.js
describe('Cart component', function() {
it('displays on the gateway page', function() {
var page = loadWebPage('http://localhost/'); //DOES NOT WORK
var cart = page.find('#cart');
expect(cart.length).toBe(1);
});
});
Run Code Online (Sandbox Code Playgroud)
没有loadWebPage()功能.这只是为了说明我认为需要的功能.
我目前正在尝试使用CasperJS和PhantomJS(这两个都是优秀的工具,感谢n1k0和Ariya)来抓取谷歌关键字工具,但我无法让它发挥作用.
这是我目前的流程:
Search.我坚持第3步:搜索表单不是常规HTML表单,我不能使用Casper#fill(),所以我直接访问字段.以下是我尝试更改Word or phrase字段值的一些语法:
this.evaluate(function() {
// Trying to change the value...
document.querySelector('textarea.sP3.sBFB').value = 'MY SUPER KEYWORDS';
document.querySelector('textarea.sP3.sBFB').setAttribute('value', 'MY SUPER KEYWORDS');
document.querySelector('textarea').value = 'MY SUPER KEYWORDS'; // there's only one <textarea> on the page
// Trying to change other attributes...
document.querySelector('textarea.sP3.sBFB').textContent = 'MY SUPER KEYWORDS';
document.querySelector('textarea').style.backgroundColor = 'yellow';
});
Run Code Online (Sandbox Code Playgroud)
什么都行不通.我正在做一个Casper#capture()正确的,看看该字段包含什么.正如您所看到的,它确认我在正确的页面上并且我已登录,但它<textarea>是空的.
奇怪的是,我可以访问DOM的其他部分:我可以改变一个链接,说的文本Advanced Options and Filters来___VINCE SAYS HELLO___(见截图),通过执行以下操作:
this.evaluate(function() { …Run Code Online (Sandbox Code Playgroud) 我有一个PhantomJS/CasperJS脚本,我正在使用node.js脚本运行process.spawn().由于CasperJS不支持require()模块,我试图从CasperJS打印命令stdout,然后从我的node.js脚本中读取它们spawn.stdout.on('data', function(data) {});,以便执行诸如将对象添加到redis/mongoose之类的事情(复杂,是的,但似乎比为此设置Web服务更简单...)CasperJS脚本执行一系列命令,并创建20个需要添加到我的数据库的屏幕截图.
但是,我无法弄清楚如何将data变量(a Buffer?)分解为行...我已经尝试将其转换为字符串然后进行替换,我已经尝试过spawn.stdout.setEncoding('utf8');但似乎没有任何工作......
这就是我现在所拥有的
var spawn = require('child_process').spawn;
var bin = "casperjs"
//googlelinks.js is the example given at http://casperjs.org/#quickstart
var args = ['scripts/googlelinks.js'];
var cspr = spawn(bin, args);
//cspr.stdout.setEncoding('utf8');
cspr.stdout.on('data', function (data) {
var buff = new Buffer(data);
console.log("foo: " + buff.toString('utf8'));
});
cspr.stderr.on('data', function (data) {
data += '';
console.log(data.replace("\n", "\nstderr: "));
});
cspr.on('exit', function (code) {
console.log('child process exited with code ' + …Run Code Online (Sandbox Code Playgroud) Chrome不会在每次请求时重新下载javascript文件.他们缓存它.
但是,当我的Phantom.js点击页面时,它每次都会下载javascript.是否有一个设置可以使这个行为像浏览器?
phantomjs ×10
javascript ×4
casperjs ×2
capybara ×1
console ×1
download ×1
jasmine ×1
jquery ×1
jsdom ×1
json ×1
karma-runner ×1
node.js ×1
performance ×1
poltergeist ×1
python ×1
selenium ×1
web-scraping ×1
zombie.js ×1