我正在使用casperjs使用localstorage对backbonejs应用程序进行一些测试.
我的问题是,在使用casperjs进行测试时,我无法清除localstorage.
我一直试图localStorage.clear();在我的casper文件的开头使用但没有清除.
好的,基本上我有一个帖子:
<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?
我试图登录到的tumblr使用方法CasperJS start,fill而waitForUrl却无法做到这一点.在我看来,表单未提交,因为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) 经过一些调试后,看起来我在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.");
}); … 我必须使用casperJS将一个文件上传到客户服务器,现在在上传之前我需要模拟两个特定链接的点击,这些链接(简单的HTML锚点)没有名称/ id/class ...(真的丑陋的HTML代码)所以我有唯一的选择,通过它的文本内容来选择它.
如何使用querySelector或querySelectorAll方法找到它?
到目前为止,我可以提出以下(不成功的尝试):(
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) 尝试使用 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 或 …
我最近开始学习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()函数中访问变量.它可能吗?
我想使用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) 我正在尝试使用 Reactjs 构建一个网络抓取应用程序。我在普通 JS 中使用了 nightmare.js,我确实得到了想要的输出。但是当我尝试添加一个按钮并创建功能时,它并没有很好地工作。
我现在想直接使用 ReactJS,因为这是我最终想要做的。
有人可以给出一个在 ReactJS 中以 jsx 格式或任何提示或指针使用 nightmare.js 或 Casper.js 的小示例代码。我知道这可能听起来很傻或很简单,感谢任何帮助。我基本上希望它在我运行 node server.js 时启动。我以后可以添加按钮、css 等。
我需要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吗?或者我还能做什么?
casperjs ×10
javascript ×10
phantomjs ×5
node.js ×2
jquery ×1
puppeteer ×1
reactjs ×1
scope ×1
tumblr ×1
web-scraping ×1