我使用CasperJS构建了一个simpel索引器.我希望Google Analytics忽略我的代理,因此所有请求都不会成为每天统计信息的一部分.
我应该如何设置Casper代理变量(标题)?
我正在尝试使用PhantomJS/CasperJS来抓取网页.我花了最近几天阅读文档,并在网上搜索,但我被困住了.
我正在抓取的页面显示了三个级别的链接 - 年,月和日.当您选择年,月和日时,#count div中会显示一个计数.此外,月份实际上是改变#imageLoad div中图像的输入(我不需要).
<div id="years">
<span class="year">2010</span>
<span class="year">2011</span>
<span class="year">2012</span>
etc...
</div>
<div id="months">
<input type="image" class="month" src="jan_image.png" onclick="changepic('jan')" />
<input type="image" class="month" src="feb_image.png" onclick="changepic('feb')" />
<input type="image" class="month" src="mar_image.png" onclick="changepic('mar')" />
etc...
</div>
<div id="days">
<span class="day">1</span>
<span class="day">2</span>
<span class="day">3</span>
etc...
</div>
<div id="imageLoad">
</div>
<div id="count">
</div>
Run Code Online (Sandbox Code Playgroud)
我正在尝试遍历链接并记录每年,几个月和几天的组合出现的计数.如您所见,月份是改变图片的输入.
我尝试过很多东西.我想做的主要是嵌套循环,循环遍历每组链接,随时点击它们.这是代码(我使用的是jQuery):
casper.start(link);
casper.then(function() {
pageInfo = this.evaluate(function(){
values = [];
for(var y = 0; y < $('#years').length; y++){
year= $('#years span').get(y);
$(year).click();
for(var m = …Run Code Online (Sandbox Code Playgroud) 我正在尝试为一个网站创建一个测试用例,其中包含一个包含3个链式选择的表单.加载网页时默认填充第一个选择.如果选择了第一个选择中的任何选项,则通过ajax调用填充第二个选择.以相同的方式,当在所选的第二个选项上选择一个选项时,通过ajax调用填充第三个选项.最后,当在第三个选择上选择一个选项时,将使用我需要验证的信息填充html表.
三个互连的选择具有此结构
<select id="s1" name="s1">
<option value="1">Option1</option>
<option value="2">Option2</option>
<option value="3">Option3</option>
</select>
<select id="s2" name="s2"></select>
<select id="s3" name="s3"></select>
Run Code Online (Sandbox Code Playgroud)
我确信该网站使用Jquery来进行ajax调用.有人用或知道用casperJs创建这个案例的干净方法吗?
我有两个网址X和Y.当casperjs在X页面上时,它必须调用Y页面,在得到响应之后它应该继续.
casper.start("X URL",function() {
var casper2 = require('casper').create();
casper2.start();
casper2.open("Y URL", function() {
RESPONSE
});
casper2.run();
}).then... >> It have to wait for response.
Run Code Online (Sandbox Code Playgroud)
我能怎么做?
我是CasperJS的新手.怎么this.echo(this.getTitle());工作但console.log("Page Title ", document.title);不是?另外为什么我的document.querySelector不工作?有没有人有一个很好的解释?我可以在CasperJS文档中找到答案吗?
这是我的代码:
var casper = require('casper').create();
var url = 'http://www.example.com/';
casper.start(url, function() {
this.echo(this.getTitle()); // works
this.echo(this.getCurrentUrl()); // works
});
casper.then(function(){
this.echo(this.getCurrentUrl()); // works
console.log("this is URL: ", document.URL); // doesn't work
console.log("Page Title ", document.title); // doesn't work
var paragraph = document.querySelectorAll('p')[0].innerHTML;
console.log(paragraph); // doesn't work
});
casper.run();
Run Code Online (Sandbox Code Playgroud)
编辑: 我现在正在使用casper.thenEvaluate和casper.evaluate,它仍然无法正常工作.有任何想法吗?
var casper = require('casper').create();
var url = 'http://www.example.com/';
casper.start(url, function() {
this.echo(this.getTitle()); // works
this.echo(this.getCurrentUrl()); // works
console.log('page loaded: '); // works …Run Code Online (Sandbox Code Playgroud) 运行最新版本的Casper 1.1.0-beta3和Phantom 1.9.7.但是,即使是最简单的casper脚本:
var casper = require('casper').create();
casper.start('http://casperjs.org/', function() {
this.echo('foo');
});
casper.run();
Run Code Online (Sandbox Code Playgroud)
因类型错误而失败
TypeError: 'undefined' is not a function (evaluating 'require('webpage').create()')
/usr/local/src/casperjs/modules/casper.js:2446 in createPage
/usr/local/src/casperjs/modules/casper.js:1703 in start
/var/sites/phantom/simple.js:5
Run Code Online (Sandbox Code Playgroud)
所需的"网页"是PhantomJS模块,在运行幻像脚本时工作正常.require方法似乎也可以正常工作(按照上面的第1行)加载自身,所以看起来PhantomJS只能被选择性识别.
Phantom安装在我的$ PATH上的/ usr/local/bin中.Casper符号链接到同一位置.O/S是Ubuntu 13.10.
关于如何说服Casper与Phantom(或反之亦然)玩得很好的任何建议都将非常感激.
html文件
<table id="tbl_proxy_list">
...........
<tr>
......
<td align="left">
<time class="icon icon-check">1 min</time>
</td>
<td align="left">
<div class="progress-bar" data-value="75" title="4625"></div>
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
ip.js文件
casper.start('http://www.proxynova.com/proxy-server-list/', function() {
var info_text = this.evaluate(function() {
var nodes = document.querySelectorAll('table[id="tbl_proxy_list"] tr');
return [].map.call(nodes, function(node) {
//return node.innerText;
return node;
});
});
var tr_data = info_text.map(function(str) {
var elements = str;
var data = {
ip : elements,
port : elements[1],
lastcheck : elements[2],
speed : elements[3], // <== value is 75..
};
return data;
}); …Run Code Online (Sandbox Code Playgroud) 我是casperjs的新手并且玩弄它,但是我无法使用它的evaluate()功能.
这是我的榜样
var casper = require('casper').create();
casper.echo('started...');
casper.start('http://www.google.de/');
casper.then(function() {
this.echo(this.getTitle());
});
casper.then(function() {
this.evaluate(function() {
this.echo('test');
});
});
casper.run();
Run Code Online (Sandbox Code Playgroud)
我正在执行它 casperjs sample.js
之后started...,Google控制台输出中没有任何反应.不执行evaluate方法中给出的闭包函数.
我甚至没有得到控制台的进一步信息--verbose.
我究竟做错了什么?
PhantomJS(CasperJS)是否使用WebKit或Chromium作为默认浏览器驱动程序?如果是WebKit,是直接WebKit还是qt或gtk?
我想使用CasperJS来抓取这个网站:http://www.agoda.com/hotel-des-arts-saigon-mgallery-collection/hotel/ho-chi-minh-city-vn.html?checkin = 2015- 11-14&洛斯= 2&成人= 2&儿童的= 0&客房= 1
我想改变CasperJS的货币期权.但是,货币期权包含在内<select></select>未嵌入表单的标签中.当我读表时,它会显示旧货币的价格.当货币发生变化时,价格会通过AJAX加载.
我怎么能用CasperJS做什么?
这是我的代码:
var casper = require("casper").create({
verbose: true,
logLevel: 'error',
pageSettings: {
loadImages: false,
}
});
var utils = require('utils');
var url = 'http://www.agoda.com/hotel-des-arts-saigon-mgallery-collection/hotel/ho-chi-minh-city-vn.html?checkin=2015-11-14&los=4&adults=2&childs=0&rooms=1';
var names = [];
var prices = [];
var currency = [];
function getName() {
var rows = document.querySelectorAll('table#room-grid-table tbody tr td:first-child .info-container .room-name span');
return Array.prototype.map.call(rows, function(e) {
return e.innerHTML;
});
}
function getPrice() {
var price = document.querySelectorAll('table#room-grid-table tbody tr td:nth-child(3) …Run Code Online (Sandbox Code Playgroud) casperjs ×10
javascript ×6
phantomjs ×5
ajax ×2
html-select ×2
blink ×1
chromium ×1
jquery ×1
loops ×1
parsing ×1
qtwebkit ×1
web-scraping ×1