标签: casperjs

单击与选择器匹配的所有链接

我有一个链接列表,我必须模拟使用CasperJS点击.他们都共享同一个班级.

但是this.click('.click-me')只使用第一个链接上的点击.

点击所有链接的正确方法是什么?我想也许我应该尝试获取链接的数量evaluate()然后使用for循环.但是,如果我使用evaluate()链接的数量,我必须使用消息进行通信,这似乎很复杂.

有没有更好的办法?

casperjs

8
推荐指数
2
解决办法
9257
查看次数

CasperJS是否提供对底层PhantomJS对象的引用?

我正在将一个脚本从PhantomJS迁移到CasperJS,我想知道Casper是否提供了它在幕后使用的Phantom对象的任何引用.

Phantom提供了一些Casper没有的功能(例如,injectJs).

为了完整起见,以下是Phantom的所有对象:

通过查看casper对象的属性,我确实找到了对webpageobject(casper.page)的引用,因此处理了我的特定用例.我想我会发布这个问题,以防其他人需要访问system,fs,webserver或child_process.

javascript automation phantomjs casperjs

8
推荐指数
1
解决办法
2301
查看次数

CasperJS - 如何打开链接数组中的所有链接

我试图让CasperJS打开链接中的每个array链接.我有它,以便在我打开链接后,它将显示该页面的标题.然而,当我运行它时,没有显示任何内容.

我可以用a for loop来显示链接,它完美无缺.

这是我刚才解释的代码:

var x;

casper.start(URL, function() {

    x = links.split(" "); // now x is an array of links

    for (var i = 0; j < x.length; i++) // for every link...
    {
        casper.thenOpen(partialURL + x[i], function() { // open that link
            console.log(this.getTitle() + '\n'); // display the title of page
        });
    }

    this.exit();
});

casper.run();
Run Code Online (Sandbox Code Playgroud)

这是我尝试的另一种方法:

var x;

casper.start(URL, function() {
    x = links.split(" "); // now x is an array of links …
Run Code Online (Sandbox Code Playgroud)

html javascript phantomjs casperjs

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

CasperJS:如何退出脚本执行?

昨天我用CasperJS编写了我的第一个测试,我发现它很棒.问题是我找不到退出脚本执行的方法(即:casperjs不存在,所以我可以返回访问我的控制台).我通过添加最终测试找到了一种解决方法

casper.test.begin('Exit', function suite(test) {
    casper.exit();
});
Run Code Online (Sandbox Code Playgroud)

关于这种技术,我有2个问题

  1. 有没有更好的办法?
  2. 这会如何影响xunit文件的结果输出?

phantomjs casperjs

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

如何使用没有表单标签的CasperJS填写表单

我是CasperJS的新手,我在登录这个网站时遇到了问题http://weibo.com/login.php

这是我尝试过的

this.fill('form#contact-form', {
    'username':    'test@test.com',
    'password':    'anypassword',

}, true);
Run Code Online (Sandbox Code Playgroud)

我不能用它,因为它没有形式.

所以我尝试使用sendKeys的另一种方法.

this.sendKeys('.W_input ', 'tinkerbell@gmail.com');
Run Code Online (Sandbox Code Playgroud)

现在我的问题是输入文本中没有ID,只有CLASS,用户名和密码都有相同的CLASS.如何只使用该类输入该文本框?或者是否可以使用XPath使用sendKeys?

javascript html-input casperjs

8
推荐指数
2
解决办法
7192
查看次数

使用Google Analytics隐藏CasperJS的足迹

我试图用我的脚本隐藏CasperJS的利用率.目前我正在尝试更改分辨率,用户代理和语言:

casper.userAgent("My UA");
casper.viewport(1600, 900);
casper.page.customHeaders = {'Accept-Language': 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'};
Run Code Online (Sandbox Code Playgroud)

casper.viewport()和casper.page.customHeaders似乎不适用于Google Analytics ...在尝试某些网站时,它似乎没问题,但Google Analytics会看到我是一个网络刮刀:

My lang is "c"
Compatibility with JAVA : no
Screen resolution : 1024x768
Flash version : not set
Run Code Online (Sandbox Code Playgroud)

我有什么可以做的吗?

(一块)解决方案

感谢kasper pedersen,这是解决方案的一部分:

我们可以在初始化部分覆盖一些变量:

casper.on('page.initialized', function (page) {
    page.evaluate(function () { 
        (function() {
            window.screen = {
                width: 1600,
                height: 900
            };
            window.navigator.__defineGetter__('javaEnabled', function () {
                return function() { return true; };
            });
        })
    });
});
Run Code Online (Sandbox Code Playgroud)

这会破坏Windows解析和Java插件.为了伪造闪存插件,我们可以做类似的事情:

casper.on('page.initialized', function (page) {
page.evaluate(function () { 
    (function() {
        window.screen = { …
Run Code Online (Sandbox Code Playgroud)

google-analytics phantomjs casperjs

8
推荐指数
2
解决办法
2364
查看次数

casper.then不等待我的指令结束执行下一步

我做了这个小测试:

casper.test.begin('Test', function() {
casper.start();

casper.then(function() {
    casper = this;
    setTimeout(function(casper) {
        casper.echo('wait 5s');
    }, 5000);
});

casper.then(function() {
    this.echo('should appear after 5s');
});

casper.run(function() {
    this.test.done();
});
});
Run Code Online (Sandbox Code Playgroud)

当我执行这个测试时,我的控制台只显示这行"应该出现在5s之后"而不是第一个句子,实际上第二个'then'不会等待5秒.

这是一个很大的问题,因为它是我的casperjs测试套件中许多随机失败的可能原因.

也许我必须使用async(with series)来执行另一个步骤.

你有这个问题吗 ?在casperjs测试中一个接一个地执行一些javascript函数的最佳实践是什么?

casperjs

8
推荐指数
1
解决办法
6785
查看次数

我可以使用phantomjs/casperjs获取原始页面源(与当前DOM相比)吗?

我正在尝试获取特定网页的原始来源.

该页面执行一些脚本,一旦加载就修改DOM.我希望在任何脚本或用户更改文档中的任何对象之前获取源代码.

使用Chrome或Firefox(可能是大多数浏览器),我可以查看DOM(调试实用程序F12)或查看原始源(右键单击,查看源代码).后者是我想要完成的.

用phantomjs/casperjs可以做到这一点吗?

在进入页面之前,我必须登录.这与casperjs一起工作正常.如果我浏览页面并呈现结果,我知道我在正确的页面上.

casper.thenOpen('http://'+customUrl, function(response) {
    this.page.render('example.png'); // *** Renders correct page (current DOM) ***
    console.log(this.page.content); // *** Gets current DOM ***
    casper.download('view-source:'+customUrl, 'b.html', 'GET'); // *** Blank page ***
    console.log(this.getHTML()); // *** Gets current DOM ***
    this.debugPage(); // *** Gets current DOM ***
    utils.dump(response); // *** No BODY ***
    casper.download('http://'+customUrl, 'a.html', 'GET');  // *** Not logged in ?! ***
});
Run Code Online (Sandbox Code Playgroud)

我已经尝试this.download(url, 'a.html')但它似乎没有共享相同的上下文,因为它返回HTML就好像我没有登录,即使我运行cookie casperjs test.casper.js --cookies-file=cookies.txt.

我相信我应该继续分析这个选项.


我也尝试过casper.open('view-source:url'),casper.open('http://url')但似乎它不能识别网址,因为我只是得到一个空白页面.

我已经查看了我从服务器获得的原始HTTP响应,我有一个实用程序,这个消息的主体(这是HTML)是我需要的,但是当页面在浏览器中加载时,DOM已经被修改. …

javascript phantomjs casperjs

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

通过PhantomJS调用时找不到模块'casper'

我在C:\ xampp\htdocs\phantom中安装了PhantomJS,并且我在这个文件夹C:\ xampp\htdocs\casper中安装了CasperJS

当我尝试使用phantomjs test.js命令在casper站点上运行这些示例代码时:

var casper=require('casper').create();
casper.start('http://google.fr/');

casper.thenEvaluate(function(term) {
    document.querySelector('input[name="q"]').setAttribute('value', term);
    document.querySelector('form[name="f"]').submit();
}, 'CasperJS');

casper.then(function() {
    // Click on 1st result link
    this.click('h3.r a');
});

casper.then(function() {
    console.log('clicked ok, new location is ' + this.getCurrentUrl());
});

casper.run();
Run Code Online (Sandbox Code Playgroud)

它告诉我一个错误:

错误:找不到模块'casper'

我做错了什么?

phantomjs casperjs

8
推荐指数
1
解决办法
9799
查看次数

在Mac(优胜美地)上使用phantomjs#2.0.0运行casperjs的问题

我试图运行CasperJSPhantomJS#2.0.0一对MAC(优胜美地).当尝试运行CasperJS时,我收到以下消息:

"CasperJS needs PhantomJS v1.x

  /usr/local/Cellar/casperjs/1.1-beta3/libexec/bin/bootstrap.js:91 in __die"
Run Code Online (Sandbox Code Playgroud)

我该如何让它运行?有没有人让它工作?

phantomjs casperjs

8
推荐指数
2
解决办法
5548
查看次数