casperjs 1.0.0.RC1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +179 -0
- data/LICENSE.md +19 -0
- data/README.md +30 -0
- data/bin/bootstrap.js +292 -0
- data/bin/usage.txt +10 -0
- data/casperjs.gemspec +21 -0
- data/modules/casper.js +1679 -0
- data/modules/cli.js +138 -0
- data/modules/clientutils.js +595 -0
- data/modules/colorizer.js +129 -0
- data/modules/events.js +247 -0
- data/modules/injector.js +93 -0
- data/modules/mouse.js +110 -0
- data/modules/querystring.js +187 -0
- data/modules/tester.js +807 -0
- data/modules/utils.js +429 -0
- data/modules/vendors/coffee-script.js +8 -0
- data/modules/xunit.js +123 -0
- data/package.json +35 -0
- data/rubybin/casperjs +57 -0
- data/samples/bbcshots.coffee +64 -0
- data/samples/bbcshots.js +80 -0
- data/samples/cliplay.coffee +19 -0
- data/samples/cliplay.js +21 -0
- data/samples/customevents.coffee +11 -0
- data/samples/customevents.js +13 -0
- data/samples/customlogging.coffee +33 -0
- data/samples/customlogging.js +42 -0
- data/samples/download.coffee +10 -0
- data/samples/download.js +11 -0
- data/samples/dynamic.coffee +60 -0
- data/samples/dynamic.js +65 -0
- data/samples/each.coffee +14 -0
- data/samples/each.js +17 -0
- data/samples/events.coffee +34 -0
- data/samples/events.js +41 -0
- data/samples/extends.coffee +29 -0
- data/samples/extends.js +37 -0
- data/samples/googlelinks.coffee +27 -0
- data/samples/googlelinks.js +33 -0
- data/samples/googlematch.coffee +47 -0
- data/samples/googlematch.js +65 -0
- data/samples/googlepagination.coffee +40 -0
- data/samples/googlepagination.js +51 -0
- data/samples/googletesting.coffee +17 -0
- data/samples/googletesting.js +23 -0
- data/samples/logcolor.coffee +10 -0
- data/samples/logcolor.js +11 -0
- data/samples/metaextract.coffee +23 -0
- data/samples/metaextract.js +29 -0
- data/samples/multirun.coffee +37 -0
- data/samples/multirun.js +56 -0
- data/samples/screenshot.coffee +28 -0
- data/samples/screenshot.js +33 -0
- data/samples/statushandlers.coffee +15 -0
- data/samples/statushandlers.js +19 -0
- data/samples/steptimeout.coffee +37 -0
- data/samples/steptimeout.js +45 -0
- data/samples/timeout.coffee +39 -0
- data/samples/timeout.js +47 -0
- data/tests/run.js +76 -0
- data/tests/site/alert.html +10 -0
- data/tests/site/click.html +40 -0
- data/tests/site/confirm.html +12 -0
- data/tests/site/elementattribute.html +6 -0
- data/tests/site/error.html +10 -0
- data/tests/site/form.html +26 -0
- data/tests/site/global.html +9 -0
- data/tests/site/images/phantom.png +0 -0
- data/tests/site/index.html +17 -0
- data/tests/site/mouse-events.html +47 -0
- data/tests/site/multiple-forms.html +16 -0
- data/tests/site/page1.html +8 -0
- data/tests/site/page2.html +8 -0
- data/tests/site/page3.html +8 -0
- data/tests/site/prompt.html +12 -0
- data/tests/site/resources.html +16 -0
- data/tests/site/result.html +11 -0
- data/tests/site/test.html +10 -0
- data/tests/site/visible.html +17 -0
- data/tests/site/waitFor.html +22 -0
- data/tests/suites/casper/agent.js +24 -0
- data/tests/suites/casper/capture.js +31 -0
- data/tests/suites/casper/click.js +61 -0
- data/tests/suites/casper/confirm.js +21 -0
- data/tests/suites/casper/elementattribute.js +8 -0
- data/tests/suites/casper/encode.js +20 -0
- data/tests/suites/casper/evaluate.js +27 -0
- data/tests/suites/casper/events.js +38 -0
- data/tests/suites/casper/exists.js +9 -0
- data/tests/suites/casper/fetchtext.js +9 -0
- data/tests/suites/casper/flow.coffee +38 -0
- data/tests/suites/casper/formfill.js +69 -0
- data/tests/suites/casper/global.js +9 -0
- data/tests/suites/casper/history.js +21 -0
- data/tests/suites/casper/hooks.js +41 -0
- data/tests/suites/casper/logging.js +38 -0
- data/tests/suites/casper/mouseevents.js +27 -0
- data/tests/suites/casper/onerror.js +19 -0
- data/tests/suites/casper/open.js +73 -0
- data/tests/suites/casper/prompt.js +17 -0
- data/tests/suites/casper/resources.coffee +24 -0
- data/tests/suites/casper/start.js +15 -0
- data/tests/suites/casper/steps.js +32 -0
- data/tests/suites/casper/viewport.js +11 -0
- data/tests/suites/casper/visible.js +17 -0
- data/tests/suites/casper/wait.js +27 -0
- data/tests/suites/casper/xpath.js +32 -0
- data/tests/suites/cli.js +125 -0
- data/tests/suites/clientutils.js +84 -0
- data/tests/suites/coffee.coffee +19 -0
- data/tests/suites/fs.js +36 -0
- data/tests/suites/http_status.js +28 -0
- data/tests/suites/injector.js +64 -0
- data/tests/suites/tester.js +121 -0
- data/tests/suites/utils.js +209 -0
- data/tests/suites/xunit.js +16 -0
- data/tests/testdir/01_a/abc.js +0 -0
- data/tests/testdir/01_a/def.js +0 -0
- data/tests/testdir/02_b/abc.js +0 -0
- data/tests/testdir/03_a.js +0 -0
- data/tests/testdir/03_b.js +0 -0
- data/tests/testdir/04/01_init.js +0 -0
- data/tests/testdir/04/02_do.js +0 -0
- metadata +192 -0
data/samples/dynamic.js
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
var casper = require("casper").create({
|
2
|
+
verbose: true
|
3
|
+
});
|
4
|
+
|
5
|
+
// The base links array
|
6
|
+
var links = [
|
7
|
+
"http://google.com/",
|
8
|
+
"http://yahoo.com/",
|
9
|
+
"http://bing.com/"
|
10
|
+
];
|
11
|
+
|
12
|
+
// If we don't set a limit, it could go on forever
|
13
|
+
var upTo = ~~casper.cli.get(0) || 10;
|
14
|
+
|
15
|
+
var currentLink = 0;
|
16
|
+
|
17
|
+
// Get the links, and add them to the links array
|
18
|
+
// (It could be done all in one step, but it is intentionally splitted)
|
19
|
+
function addLinks(link) {
|
20
|
+
this.then(function() {
|
21
|
+
var found = this.evaluate(searchLinks);
|
22
|
+
this.echo(found.length + " links found on " + link);
|
23
|
+
links = links.concat(found);
|
24
|
+
});
|
25
|
+
}
|
26
|
+
|
27
|
+
// Fetch all <a> elements from the page and return
|
28
|
+
// the ones which contains a href starting with 'http://'
|
29
|
+
function searchLinks() {
|
30
|
+
var filter, map;
|
31
|
+
filter = Array.prototype.filter;
|
32
|
+
map = Array.prototype.map;
|
33
|
+
return map.call(filter.call(document.querySelectorAll("a"), function(a) {
|
34
|
+
return (/^http:\/\/.*/i).test(a.getAttribute("href"));
|
35
|
+
}), function(a) {
|
36
|
+
return a.getAttribute("href");
|
37
|
+
});
|
38
|
+
}
|
39
|
+
|
40
|
+
// Just opens the page and prints the title
|
41
|
+
function start(link) {
|
42
|
+
this.start(link, function() {
|
43
|
+
this.echo('Page title: ' + this.getTitle());
|
44
|
+
});
|
45
|
+
}
|
46
|
+
|
47
|
+
// As long as it has a next link, and is under the maximum limit, will keep running
|
48
|
+
function check() {
|
49
|
+
if (links[currentLink] && currentLink < upTo) {
|
50
|
+
this.echo('--- Link ' + currentLink + ' ---');
|
51
|
+
start.call(this, links[currentLink]);
|
52
|
+
addLinks.call(this, links[currentLink]);
|
53
|
+
currentLink++;
|
54
|
+
this.run(check);
|
55
|
+
} else {
|
56
|
+
this.echo("All done.");
|
57
|
+
this.exit();
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
casper.start().then(function() {
|
62
|
+
this.echo("Starting");
|
63
|
+
});
|
64
|
+
|
65
|
+
casper.run(check);
|
data/samples/each.coffee
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
casper = require("casper").create()
|
2
|
+
|
3
|
+
links = [
|
4
|
+
"http://google.com/"
|
5
|
+
"http://yahoo.com/"
|
6
|
+
"http://bing.com/"
|
7
|
+
]
|
8
|
+
|
9
|
+
casper.start()
|
10
|
+
|
11
|
+
casper.each links, (self, link) ->
|
12
|
+
@thenOpen link, -> @echo "#{@getTitle()} - #{link}"
|
13
|
+
|
14
|
+
casper.run()
|
data/samples/each.js
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
var casper = require("casper").create();
|
2
|
+
|
3
|
+
var links = [
|
4
|
+
"http://google.com/",
|
5
|
+
"http://yahoo.com/",
|
6
|
+
"http://bing.com/"
|
7
|
+
];
|
8
|
+
|
9
|
+
casper.start();
|
10
|
+
|
11
|
+
casper.each(links, function(self, link) {
|
12
|
+
this.thenOpen(link, function() {
|
13
|
+
this.echo(this.getTitle() + " - " + link);
|
14
|
+
});
|
15
|
+
});
|
16
|
+
|
17
|
+
casper.run();
|
@@ -0,0 +1,34 @@
|
|
1
|
+
###
|
2
|
+
This script will add a custom HTTP status code handler, here for 404 pages.
|
3
|
+
###
|
4
|
+
|
5
|
+
casper = require("casper").create()
|
6
|
+
|
7
|
+
casper.on "http.status.200", (resource) ->
|
8
|
+
@echo "#{resource.url} is OK", "INFO"
|
9
|
+
|
10
|
+
casper.on "http.status.301", (resource) ->
|
11
|
+
@echo "#{resource.url} is permanently redirected", "PARAMETER"
|
12
|
+
|
13
|
+
casper.on "http.status.302", (resource) ->
|
14
|
+
@echo "#{resource.url} is temporarily redirected", "PARAMETER"
|
15
|
+
|
16
|
+
casper.on "http.status.404", (resource) ->
|
17
|
+
@echo "#{resource.url} is not found", "COMMENT"
|
18
|
+
|
19
|
+
casper.on "http.status.500", (resource) ->
|
20
|
+
@echo "#{resource.url} is in error", "ERROR"
|
21
|
+
|
22
|
+
links = [
|
23
|
+
"http://google.com/"
|
24
|
+
"http://www.google.com/"
|
25
|
+
"http://www.google.com/plop"
|
26
|
+
]
|
27
|
+
|
28
|
+
casper.start()
|
29
|
+
|
30
|
+
casper.each links, (self, link) ->
|
31
|
+
self.thenOpen link, ->
|
32
|
+
@echo "#{link} loaded"
|
33
|
+
|
34
|
+
casper.run()
|
data/samples/events.js
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
/*
|
2
|
+
* This script will add a custom HTTP status code handler, here for 404 pages.
|
3
|
+
*/
|
4
|
+
|
5
|
+
var casper = require("casper").create();
|
6
|
+
|
7
|
+
casper.on("http.status.200", function(resource) {
|
8
|
+
this.echo(resource.url + " is OK", "INFO");
|
9
|
+
});
|
10
|
+
|
11
|
+
casper.on("http.status.301", function(resource) {
|
12
|
+
this.echo(resource.url + " is permanently redirected", "PARAMETER");
|
13
|
+
});
|
14
|
+
|
15
|
+
casper.on("http.status.302", function(resource) {
|
16
|
+
this.echo(resource.url + " is temporarily redirected", "PARAMETER");
|
17
|
+
});
|
18
|
+
|
19
|
+
casper.on("http.status.404", function(resource) {
|
20
|
+
this.echo(resource.url + " is not found", "COMMENT");
|
21
|
+
});
|
22
|
+
|
23
|
+
casper.on("http.status.500", function(resource) {
|
24
|
+
this.echo(resource.url + " is in error", "ERROR");
|
25
|
+
});
|
26
|
+
|
27
|
+
var links = [
|
28
|
+
"http://google.com/",
|
29
|
+
"http://www.google.com/",
|
30
|
+
"http://www.google.com/plop"
|
31
|
+
];
|
32
|
+
|
33
|
+
casper.start();
|
34
|
+
|
35
|
+
casper.each(links, function(self, link) {
|
36
|
+
self.thenOpen(link, function() {
|
37
|
+
this.echo(link + " loaded");
|
38
|
+
});
|
39
|
+
});
|
40
|
+
|
41
|
+
casper.run();
|
@@ -0,0 +1,29 @@
|
|
1
|
+
casper = require("casper").create
|
2
|
+
loadImages: false
|
3
|
+
logLevel: "debug"
|
4
|
+
verbose: true
|
5
|
+
|
6
|
+
links =
|
7
|
+
"http://edition.cnn.com/": 0
|
8
|
+
"http://www.nytimes.com/": 0
|
9
|
+
"http://www.bbc.co.uk/": 0
|
10
|
+
"http://www.guardian.co.uk/": 0
|
11
|
+
|
12
|
+
fantomas = Object.create(casper)
|
13
|
+
|
14
|
+
fantomas.countLinks = ->
|
15
|
+
@evaluate ->
|
16
|
+
__utils__.findAll("a[href]").length
|
17
|
+
|
18
|
+
fantomas.renderJSON = (what) ->
|
19
|
+
@echo JSON.stringify(what, null, " ")
|
20
|
+
|
21
|
+
fantomas.start()
|
22
|
+
|
23
|
+
Object.keys(links).forEach (url) ->
|
24
|
+
fantomas.thenOpen url, ->
|
25
|
+
links[url] = @countLinks()
|
26
|
+
|
27
|
+
fantomas.run ->
|
28
|
+
@renderJSON(links)
|
29
|
+
@exit()
|
data/samples/extends.js
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
var casper = require("casper").create({
|
2
|
+
loadImages: false,
|
3
|
+
logLevel: "debug",
|
4
|
+
verbose: true
|
5
|
+
});
|
6
|
+
|
7
|
+
var links = {
|
8
|
+
"http://edition.cnn.com/": 0,
|
9
|
+
"http://www.nytimes.com/": 0,
|
10
|
+
"http://www.bbc.co.uk/": 0,
|
11
|
+
"http://www.guardian.co.uk/": 0
|
12
|
+
};
|
13
|
+
|
14
|
+
var fantomas = Object.create(casper);
|
15
|
+
|
16
|
+
fantomas.countLinks = function() {
|
17
|
+
return this.evaluate(function() {
|
18
|
+
return __utils__.findAll("a[href]").length;
|
19
|
+
});
|
20
|
+
};
|
21
|
+
|
22
|
+
fantomas.renderJSON = function(what) {
|
23
|
+
this.echo(JSON.stringify(what, null, " "));
|
24
|
+
};
|
25
|
+
|
26
|
+
fantomas.start();
|
27
|
+
|
28
|
+
Object.keys(links).forEach(function(url) {
|
29
|
+
fantomas.thenOpen(url, function() {
|
30
|
+
links[url] = this.countLinks();
|
31
|
+
});
|
32
|
+
});
|
33
|
+
|
34
|
+
fantomas.run(function() {
|
35
|
+
this.renderJSON(links);
|
36
|
+
this.exit();
|
37
|
+
});
|
@@ -0,0 +1,27 @@
|
|
1
|
+
links = []
|
2
|
+
casper = require("casper").create()
|
3
|
+
|
4
|
+
getLinks = ->
|
5
|
+
links = document.querySelectorAll("h3.r a")
|
6
|
+
Array::map.call links, (e) ->
|
7
|
+
e.getAttribute "href"
|
8
|
+
|
9
|
+
casper.start "http://google.fr/", ->
|
10
|
+
# search for 'casperjs' from google form
|
11
|
+
@fill "form[action=\"/search\"]", q: "casperjs", true
|
12
|
+
|
13
|
+
casper.then ->
|
14
|
+
# aggregate results for the 'casperjs' search
|
15
|
+
links = @evaluate(getLinks)
|
16
|
+
# now search for 'phantomjs' by fillin the form again
|
17
|
+
@fill "form[action=\"/search\"]", q: "phantomjs", true
|
18
|
+
|
19
|
+
casper.then ->
|
20
|
+
# aggregate results for the 'phantomjs' search
|
21
|
+
links = links.concat(@evaluate(getLinks))
|
22
|
+
|
23
|
+
casper.run ->
|
24
|
+
# echo results in some pretty fashion
|
25
|
+
@echo links.length + " links found:"
|
26
|
+
@echo " - " + links.join("\n - ")
|
27
|
+
@exit()
|
@@ -0,0 +1,33 @@
|
|
1
|
+
var links = [];
|
2
|
+
var casper = require("casper").create();
|
3
|
+
|
4
|
+
function getLinks() {
|
5
|
+
var links = document.querySelectorAll("h3.r a");
|
6
|
+
return Array.prototype.map.call(links, function(e) {
|
7
|
+
return e.getAttribute("href");
|
8
|
+
});
|
9
|
+
};
|
10
|
+
|
11
|
+
casper.start("http://google.fr/", function() {
|
12
|
+
// search for 'casperjs' from google form
|
13
|
+
this.fill('form[action="/search"]', { q: "casperjs" }, true);
|
14
|
+
});
|
15
|
+
|
16
|
+
casper.then(function() {
|
17
|
+
// aggregate results for the 'casperjs' search
|
18
|
+
links = this.evaluate(getLinks);
|
19
|
+
// now search for 'phantomjs' by fillin the form again
|
20
|
+
this.fill('form[action="/search"]', { q: "phantomjs" }, true);
|
21
|
+
});
|
22
|
+
|
23
|
+
casper.then(function() {
|
24
|
+
// aggregate results for the 'phantomjs' search
|
25
|
+
links = links.concat(this.evaluate(getLinks));
|
26
|
+
});
|
27
|
+
|
28
|
+
casper.run(function() {
|
29
|
+
// echo results in some pretty fashion
|
30
|
+
this.echo(links.length + " links found:");
|
31
|
+
this.echo(" - " + links.join("\n - "))
|
32
|
+
this.exit();
|
33
|
+
});
|
@@ -0,0 +1,47 @@
|
|
1
|
+
###
|
2
|
+
Takes provided terms passed as arguments and query google for the number of
|
3
|
+
estimated results each have.
|
4
|
+
|
5
|
+
Usage:
|
6
|
+
$ casperjs googlematch.coffee nicolas chuck borris
|
7
|
+
nicolas: 69600000
|
8
|
+
chuck: 49500000
|
9
|
+
borris: 2370000
|
10
|
+
winner is "nicolas" with 69600000 results
|
11
|
+
###
|
12
|
+
|
13
|
+
casper = require("casper").create verbose: true
|
14
|
+
|
15
|
+
casper.fetchScore = ->
|
16
|
+
@evaluate ->
|
17
|
+
result = document.querySelector('#resultStats').innerText
|
18
|
+
parseInt /Environ ([0-9\s]{1,}).*/.exec(result)[1].replace(/\s/g, '')
|
19
|
+
|
20
|
+
terms = casper.cli.args # terms are passed through command-line arguments
|
21
|
+
|
22
|
+
if terms.length < 2
|
23
|
+
casper
|
24
|
+
.echo("Usage: $ casperjs googlematch.js term1 term2 [term3]...")
|
25
|
+
.exit(1)
|
26
|
+
|
27
|
+
scores = []
|
28
|
+
|
29
|
+
casper.echo "Let the match begin between \"#{terms.join '", "'}\"!"
|
30
|
+
|
31
|
+
casper.start "http://google.fr/"
|
32
|
+
|
33
|
+
casper.each terms, (self, term) ->
|
34
|
+
@then -> @fill 'form[action="/search"]', { q: term }, true
|
35
|
+
@then ->
|
36
|
+
score = @fetchScore()
|
37
|
+
scores.push term: term, score: score
|
38
|
+
@echo "#{term}: #{score}"
|
39
|
+
|
40
|
+
casper.run ->
|
41
|
+
if scores.length is 0
|
42
|
+
@echo "No result found"
|
43
|
+
else
|
44
|
+
scores.sort (a, b) -> b.score - a.score
|
45
|
+
winner = scores[0]
|
46
|
+
@echo "Winner is \"" + winner.term + "\" with " + winner.score + " results"
|
47
|
+
@exit()
|
@@ -0,0 +1,65 @@
|
|
1
|
+
/*
|
2
|
+
* Takes provided terms passed as arguments and query google for the number of
|
3
|
+
* estimated results each have.
|
4
|
+
*
|
5
|
+
* Usage:
|
6
|
+
* $ casperjs googlematch.js nicolas chuck borris
|
7
|
+
* nicolas: 69600000
|
8
|
+
* chuck: 49500000
|
9
|
+
* borris: 2370000
|
10
|
+
* winner is "nicolas" with 69600000 results
|
11
|
+
*/
|
12
|
+
|
13
|
+
var casper = require("casper").create({
|
14
|
+
verbose: true
|
15
|
+
});
|
16
|
+
|
17
|
+
casper.fetchScore = function() {
|
18
|
+
return this.evaluate(function() {
|
19
|
+
var result = document.querySelector('#resultStats').innerText;
|
20
|
+
return parseInt(/Environ ([0-9\s]{1,}).*/.exec(result)[1].replace(/\s/g, ''), 10);
|
21
|
+
});
|
22
|
+
};
|
23
|
+
|
24
|
+
var terms = casper.cli.args;
|
25
|
+
|
26
|
+
if (terms.length < 2) {
|
27
|
+
casper
|
28
|
+
.echo("Usage: $ casperjs googlematch.js term1 term2 [term3]...")
|
29
|
+
.exit(1)
|
30
|
+
;
|
31
|
+
}
|
32
|
+
|
33
|
+
var scores = [];
|
34
|
+
|
35
|
+
casper.echo("Let the match begin between \"" + (terms.join('", "')) + "\"!");
|
36
|
+
|
37
|
+
casper.start("http://google.fr/");
|
38
|
+
|
39
|
+
casper.each(terms, function(casper, term, i) {
|
40
|
+
this.echo('Fecthing score for ' + term);
|
41
|
+
this.then(function() {
|
42
|
+
this.fill('form[action="/search"]', {q: term}, true);
|
43
|
+
});
|
44
|
+
this.then(function() {
|
45
|
+
var score = this.fetchScore();
|
46
|
+
scores.push({
|
47
|
+
term: term,
|
48
|
+
score: score
|
49
|
+
});
|
50
|
+
this.echo(term + ': ' + score);
|
51
|
+
});
|
52
|
+
});
|
53
|
+
|
54
|
+
casper.run(function() {
|
55
|
+
if (scores.length === 0) {
|
56
|
+
this.echo("No result found");
|
57
|
+
} else {
|
58
|
+
scores.sort(function(a, b) {
|
59
|
+
return b.score - a.score;
|
60
|
+
});
|
61
|
+
var winner = scores[0];
|
62
|
+
this.echo("Winner is \"" + winner.term + "\" with " + winner.score + " results");
|
63
|
+
}
|
64
|
+
this.exit();
|
65
|
+
});
|
@@ -0,0 +1,40 @@
|
|
1
|
+
###
|
2
|
+
Capture multiple pages of google search results
|
3
|
+
|
4
|
+
Usage: $ casperjs googlepagination.coffee my search terms
|
5
|
+
|
6
|
+
(all arguments will be used as the query)
|
7
|
+
###
|
8
|
+
|
9
|
+
casper = require("casper").create()
|
10
|
+
currentPage = 1
|
11
|
+
|
12
|
+
if casper.cli.args.length is 0
|
13
|
+
casper
|
14
|
+
.echo("Usage: $ casperjs googlepagination.coffee my search terms")
|
15
|
+
.exit(1)
|
16
|
+
|
17
|
+
processPage = ->
|
18
|
+
@echo "capturing page #{currentPage}"
|
19
|
+
@capture "google-results-p#{currentPage}.png"
|
20
|
+
|
21
|
+
# don't go too far down the rabbit hole
|
22
|
+
return if currentPage >= 5
|
23
|
+
|
24
|
+
if @exists "#pnnext"
|
25
|
+
currentPage++
|
26
|
+
@echo "requesting next page: #{currentPage}"
|
27
|
+
url = @getCurrentUrl()
|
28
|
+
@thenClick("#pnnext").then ->
|
29
|
+
@waitFor (->
|
30
|
+
url isnt @getCurrentUrl()
|
31
|
+
), processPage
|
32
|
+
else
|
33
|
+
@echo "that's all, folks."
|
34
|
+
|
35
|
+
casper.start "http://google.fr/", ->
|
36
|
+
@fill 'form[action="/search"]', q: casper.cli.args.join(" "), true
|
37
|
+
|
38
|
+
casper.then processPage
|
39
|
+
|
40
|
+
casper.run()
|