标签: casperjs

使用Casperjs清除当地存储

我正在使用casperjs使用localstorage对backbonejs应用程序进行一些测试.

我的问题是,在使用casperjs进行测试时,我无法清除localstorage.

我一直试图localStorage.clear();在我的casper文件的开头使用但没有清除.

javascript local-storage phantomjs casperjs

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

使用CasperJS删除DOM元素

好的,基本上我有一个帖子:

<div class=post>
  <div class=content></div>
  <div class=content-meta></div>
</div>
Run Code Online (Sandbox Code Playgroud)

这就是它的原型,以帮助解释

所以我想要做的是使用一些JS基本上删除或隐藏div'content-meta'

使用JQuery我有:

$('.content-meta').remove();
Run Code Online (Sandbox Code Playgroud)

但是当我使用CasperJS时,我有点困惑,因为我应该如何实现这个代码.

我希望在屏幕捕获之前操纵一个帖子(screencapture部分工作正常)

下面是我一直在测试的代码(URL的OMITTED),它很好地接受了这个类,但我不知道在屏幕捕获之前在哪里/如何执行Jquery来删除检测到的元素:

casper.start('http://pageurl.com/XYZ', function() {

if (this.exists('.content-meta')) {
    this.echo('found .content-meta', 'INFO');
} else {
    this.echo('.content-meta not found', 'ERROR');
}
this.captureSelector('resultingcapture.png', '.post');
});

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

TL; DR如何从CasperJS函数中执行JS/Jquery?

javascript phantomjs casperjs

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

无法使用CasperJS提交表单 - 换句话说无法登录

我试图登录到的tumblr使用方法CasperJS start,fillwaitForUrl无法做到这一点.在我看来,表单未提交,因为waitForUr每次都过期超时.

终端响应:

我正在使用的代码是这样的:

/*jslint browser: true, regexp: true */
// global casper, require 

var LOGIN_URL, LOGIN_USERNAME, LOGIN_PASSWORD, casper;

casper = require('casper').create({
    waitTimeout: 20000,
    viewportSize: {
        width: 1024,
        height: 768
    },
    verbose: true,
    logLevel: 'debug',
    userAgent: 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'
});

if (!casper.cli.has('username') && !casper.cli.has('password')) {
    casper.echo('Usage: $ casperjs sfdclogin.casper.js --username=USERNAME --password=PASSWORD').exit(-1);
}

LOGIN_URL = 'https://tumblr.com/login';

LOGIN_USERNAME = casper.cli.get('username');
LOGIN_PASSWORD = casper.cli.get('password');

phantom.cookiesEnabled = true;

casper …
Run Code Online (Sandbox Code Playgroud)

javascript tumblr node.js casperjs

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

如何在CasperJS中单击此按钮?

经过一些调试后,看起来我在CasperJS中单击或触发此按钮的单击事件时遇到困难:

<a id="generate" class="btn" href="#generate"><strong>Generate</strong></a>
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的代码:

var casper = require('casper').create({
    clientScripts: [
        '...\\JQuery\\jquery-1.11.1.min.js'
    ],
    pageSettings: {
        userAgent: 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0'
    }
});
casper.on('page.initialized', function (page) {
    page.evaluate(function () {
        (function() {
            window.screen = {
                width: 1600,
                height: 900
            };
            var fake_nav = {};
            for (var i in navigator) {
                fake_nav[i] = navigator[i];
            }
            fake_nav.javaEnabled = function() { return true; };
            fake_nav.language = 'en-US';
            window.navigator = fake_nav;
        })();
    });
});
casper.start('http://www.json-generator.com/', function() {
    this.echo("Loaded successfully.");
}); …

javascript jquery phantomjs casperjs

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

casperJS如何使用querySelector或querySelectorAll通过特定的起始文本选择元素

我必须使用casperJS将一个文件上传到客户服务器,现在在上传之前我需要模拟两个特定链接的点击,这些链接(简单的HTML锚点)没有名称/ id/class ...(真的丑陋的HTML代码)所以我有唯一的选择,通过它的文本内容来选择它.

如何使用querySelectorquerySelectorAll方法找到它?

到目前为止,我可以提出以下(不成功的尝试):(

querySelector("a[text()='texttofind']");
querySelector("a[text='texttofind']");
querySelector("a[text=texttofind]");
Run Code Online (Sandbox Code Playgroud)

编辑后的所有建议

TITLE UPDATED 更具体地说明我的问题,似乎只与casperjs有关

平台 - Windows 7 - CasperJS版本1.1.0-beta3 - phantomjs版本1.9.7 - Python 2.7

所以,可能我太愚蠢了:(现在我发布一个完整的例子,遗憾地对我不起作用:(

HTML主索引

<html>
<head>
<title>TEST Main Page</title>
</head>
<frameset cols="100,100" >
    <frame name="menu_a" src="menu_1.html">
    <frame name="menu_b" src="menu_2.html">
</frameset>
</html>
Run Code Online (Sandbox Code Playgroud)

HTML menu_1.html

<html>
<head>
<title>TEST Menu 1</title>
</head>
<body style="background-color:red;">
<h3>Menu 1</h3>
<select onchange="javscript:alert('test')" id="test" size="1" name="systemID">
    <option value="0">---</option>
    <option selected="selected" value="1">TestMenu1            </option>
    <option value="17">TestMenu2                               </option>
</select>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

HTML menu_2.html

<html>
<head>
<title>TEST …
Run Code Online (Sandbox Code Playgroud)

javascript css-selectors selectors-api casperjs

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

CasperJS 无法设置 window.navigator 对象

尝试使用 CasperJS 抓取网页。网页会检查浏览器是否为 IE 6/7。

使用 casperjs 传递 userAgent 似乎不满足其条件。UserAgent 通过:Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.1) 以下是页面进行的检查以确定浏览器

agt = navigator.userAgent.toLowerCase();
browserType = navigator.appName;

if( ((browserType.indexOf("xplorer") != -1) 
    && (agt.indexOf("msie 6.") != -1))
    ||  ((browserType.indexOf("xplorer") != -1) 
    && (agt.indexOf("msie 7.") != -1)) )
{

}
else
{
    alert("This "+ browserType + " Version is not supported by this application. Please use Internet Explorer  6.x or Internet Explorer 7.x.");
    window.close();
}
Run Code Online (Sandbox Code Playgroud)

以下是来自 casperjs 的调试信息。

[info] [remote] [alert] 此应用程序不支持此 Netscape 版本。请使用 Internet Explorer 6.x 或 …

javascript headless-browser phantomjs casperjs

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

无法从CasperJS中的thenEvaluate()函数中访问变量

我最近开始学习CasperJS,我正在尝试登录YouTube.这是我目前的代码:

// XPathSignInButton is predefined
var Username = 'user123';
var Password = 'pass123';

casper.waitForSelector(xPathSignInButton, function() {
    this.thenEvaluate(function() {
        $('#Email').val(Username);
        $('#Passwd').val(Password);
    });
}); 
Run Code Online (Sandbox Code Playgroud)

上面的代码不会操作输入字段(不会在其中写入),但是如果我替换thenEvaluate()this.fillSelectors(),则会正常访问变量并且一切正常:

// XPathSignInButton is predefined
// signInFormSelector is predefined
casper.waitForSelector(xPathSignInButton, function() {
    this.fillSelectors(signInFormSelector, {
        'input[name="Email"]': Username,
        'input[name="Passwd"]': Password
    });
});
Run Code Online (Sandbox Code Playgroud)

我首先想到我如何调用jQuery有一个问题,但当我用实际的字符串替换变量时:$('#Email').val('user123');$('#Email').val('pass123');- 它就像一个魅力.

我的问题是如何从thenEvaluate()函数中访问变量.它可能吗?

javascript scope phantomjs casperjs

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

用CasperJS提取表元素

我想使用CasperJS将表中的连续(内部)HTML字段提取到列表中。我知道从表中提取连续元素属性很容易,但是我不知道如何提取连续HTML字段。

为了演示,这是一个简单的HTML表:

<html>
  <head></head>
  <body>
    <table>
      <tbody>
        <tr><td name="a">1</td><td>hop</td></tr>
        <tr><td name="b">2</td><td>skip</td></tr>
        <tr><td name="c">3</td><td>jump</td></tr>
      </tbody>
    </table>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是一个完整的Casper程序,用于从表中提取位:

"use strict";
var casper = require('casper').create();

casper.start('file:///tmp/casper-so.html');

// I want to print the list '["a", "b", "c"]'
casper.then(function a1() {
    var names = casper.getElementsAttribute('table tr td[name]', 'name');
    // prints ["a", "b", "c"] as desired...
    console.log(JSON.stringify(names, null, 2));
});

// I want to print the list '["hop", "skip", "jump"]'
casper.then(function a2() {
    var verbs = ???;
    // What should go on …
Run Code Online (Sandbox Code Playgroud)

javascript css-selectors casperjs

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

使用 Reactjs 抓取网页

我正在尝试使用 Reactjs 构建一个网络抓取应用程序。我在普通 JS 中使用了 nightmare.js,我确实得到了想要的输出。但是当我尝试添加一个按钮并创建功能时,它并没有很好地工作。

我现在想直接使用 ReactJS,因为这是我最终想要做的。

有人可以给出一个在 ReactJS 中以 jsx 格式或任何提示或指针使用 nightmare.js 或 Casper.js 的小示例代码。我知道这可能听起来很傻或很简单,感谢任何帮助。我基本上希望它在我运行 node server.js 时启动。我以后可以添加按钮、css 等。

javascript web-scraping casperjs reactjs

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

如何暂停并等待Puppeteer的用户输入?

我需要Puppeteer暂停并等待和的用户输入,username然后password才能继续。这是一个nodejs8.12.0应用程序。

(async () => {
    const browser = await puppeteer.launch({headless: false});
    const page = await browser.newPage();   
    await page.goto('https://www.myweb.com/login/');

    //code to wait for user to enter username and password, and click `login`

    const first_page = await page.content();

   //do something 

    await browser.close();
)}();
Run Code Online (Sandbox Code Playgroud)

基本上,程序会暂停并等待,直到用户单击login按钮。有可能这样做Puppeteer吗?或者我还能做什么?

javascript node.js headless-browser casperjs puppeteer

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