标签: phantomjs

使用PhantomJS获取JSON页面内容

我想知道如何在phantomjs中解析JSON.任何页面内容都包含在html(<html><body><pre>{JSON string}</pre></body></html>)中.是否有选项可以删除封闭标签或要求不同的Content-Type为"application/json"?如果没有,解析它的最佳方法是什么.是否在使用includeJS jQuery后使用jQuery?

json phantomjs

20
推荐指数
1
解决办法
2万
查看次数

输出带有casper/phantomjs的客户端控制台

通过casperjs文档我无法找到从客户端javascript中看到console.log的位置.这可能吗?

javascript console headless-browser phantomjs casperjs

20
推荐指数
1
解决办法
1万
查看次数

phantom.js与zombie.js的表现

我正在评估phantom.jszombie.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)

performance zombie.js phantomjs casperjs

20
推荐指数
1
解决办法
6689
查看次数

使用Selenium与Python和PhantomJS将文件下载到文件系统

我一直在努力使用PhantomJS/Selenium/python-selenium将文件下载到文件系统.我能够轻松浏览DOM并单击,悬停等.然而,下载文件非常麻烦.我尝试过使用Firefox和pyvirtualdisplay的无头方法,但这种方法效果不佳,而且速度令人难以置信.我知道CasperJS允许文件下载.有谁知道如何将CasperJS与Python集成或如何利用PhantomJS下载文件.非常感激.

python selenium download phantomjs selenium-webdriver

20
推荐指数
2
解决办法
2万
查看次数

如何通过karma和phantomjs来解决内存错误

我们正在运行测试使用karmaphantomjs 上周,我们的测试神秘地开始崩溃phantomJS,错误为-1073741819.

基于此线程,Chutzpah似乎代码表明PhantomJS的本机内存故障.

经过进一步调查,我们一直看到幻像在750MB左右的内存中崩溃.

有没有办法配置Karma,以便它不会遇到这个限制?或者告诉它冲洗幽灵的方法?

到目前为止,我们只进行了大约1200次测试 我们大约是项目的1/4,因此5000个UI测试似乎不可能.

phantomjs karma-runner karma-jasmine

20
推荐指数
4
解决办法
1万
查看次数

ReferenceError:无法找到变量:jQuery with Poltergeist/Capybara

我想做什么

我正在尝试使用带有恶作剧的水豚来登录亚马逊这个网址...

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)

我尝试了很多事情试图让我了解正在发生的事情,但我是空洞的.

任何关于我可能会在哪里或可能会发生什么的想法都将不胜感激.

javascript jquery capybara phantomjs poltergeist

20
推荐指数
1
解决办法
2935
查看次数

将网页加载到运行PhantomJS的无头Jasmine规范中

如何在一个页面中读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()功能.这只是为了说明我认为需要的功能.

javascript headless-browser jasmine jsdom phantomjs

20
推荐指数
1
解决办法
1202
查看次数

使用CasperJS和PhantomJS刮取Google关键字工具

我目前正在尝试使用CasperJS和PhantomJS(这两个都是优秀的工具,感谢n1k0和Ariya)来抓取谷歌关键字工具,但我无法让它发挥作用.

这是我目前的流程:

  1. 使用我的Google帐户登录(以避免在关键字工具中使用验证码).
  2. 导航到"关键字工具"页面.
  3. 填写搜索表单并按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)

javascript screen-scraping web-scraping phantomjs

19
推荐指数
1
解决办法
3834
查看次数

逐行解析生成的node.js子进程的输出

我有一个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)

node.js phantomjs

19
推荐指数
3
解决办法
2万
查看次数

如何使Phantom.js像普通浏览器一样缓存资源?

Chrome不会在每次请求时重新下载javascript文件.他们缓存它.

但是,当我的Phantom.js点击页面时,它每次都会下载javascript.是否有一个设置可以使这个行为像浏览器?

phantomjs

19
推荐指数
1
解决办法
1万
查看次数