· 9 years ago · Dec 19, 2016, 02:14 AM
1Requires
2var casper = require('casper').create({
3 verbose: true,
4 logLevel: "debug"
5});
6var nicknames = require('./nicknames.json');
7var fs = require('fs');
8
9// Settings
10var start = 0; // Start from x (NAMEx, EMAIL+x@domain.com)
11var end = 10; // Up to x, but not including (exclusive)
12
13var useNicknamesFile = true; // Use nicknames file, or just append numbers to username?
14var useRandomPassword = false; // Generate a random password?
15
16var outputFile = 'accounts.txt'; // File which will contain the generated "username password" combinations.
17var outputFormat = '%NICK% %PASS%\r\n'; // Format used to save the account data in outputFile. Supports %NICK%, %PASS%.
18
19var country = 'US'; // Country code (BE, NL, FR, ...)
20var dob = '1990-12-30'; // Date of birth, YYYY-mm-dd
21var username = 'user'; // User- & display name. Make sure any "(username + number)@domain.com" is 100% unique.
22var password = 'pass'; // Static password for all accounts. Ignored if useRandomPassword is true.
23var email_user = 'jaydizzldawg'; // If your email is email@domain.com, enter "email"
24var email_domain = 'gmail.com'; // Domain of e-mail host
25
26// App data
27var url_ptc = 'https://club.pokemon.com/us/pokemon-trainer-club/sign-up/';
28
29// Settings check
30if (!useNicknamesFile && (username + end).length > 16) {
31 console.log("Error: length of username + number can't be longer than 16 characters.");
32 console.log("Please use a shorter nickname.");
33 process.exit();
34}
35
36if ((email_user + '+' + username + end + '@' + email_domain).length > 75) {
37 console.log("Error: length of e-mail address including the + trick can't be longer than 75 characters.");
38 console.log("Please use a shorter e-mail address and/or nickname.");
39 process.exit();
40}
41
42if (!useRandomPassword && password.length > 15) {
43 console.log("Error: length of password can't be longer than 15 characters.");
44 console.log("Please use a shorter password.");
45 process.exit();
46}
47
48// LETSAHGO
49casper.start();
50
51casper.on('complete.error', function(err) {
52 this.echo("Complete callback has failed: " + err);
53});
54
55casper.on('error', function(msg, trace) {
56 this.echo("Err: " + msg, "ERROR");
57});
58
59casper.on("page.error", function(msg, trace) {
60 this.echo("Error: " + msg, "ERROR");
61});
62
63console.log('[o] Starting ' + start + ' to ' + (end - 1) + '.');
64
65for(var i = start; i < end; i++) {
66 (function(ctr) {
67 casper.thenOpen(url_ptc, handleDobPage.bind(casper, ctr)).then(handleSignupPage.bind(casper, ctr)).then(handleFinished.bind(casper, ctr));
68 })(i);
69}
70
71casper.run();
72
73function randomPassword() {
74 return Math.random().toString(36).substr(2, 8);
75}
76
77// Pages
78function handleDobPage(ctr) {
79 this.echo('[' + ctr + '] First Page: ' + this.getTitle());
80
81 this.fill('form[name="verify-age"]', {
82 'dob': dob,
83 'country': country
84 }, true);
85}
86
87function handleSignupPage(ctr) {
88 // Server sometimes messes up and redirects us to the verify-age page again
89 if(this.exists('form[name="verify-age"]')) {
90 this.echo('[' + ctr + '] Server is acting up. Retrying...');
91 handleDobPage.call(this, ctr);
92 this.then(handleSignupPage.bind(casper, ctr));
93 return;
94 }
95
96 // OK we're on the right page
97 var _pass = password;
98 var _nick = username + ctr;
99
100 var formdata = {
101 'terms': true
102 };
103
104 this.echo('[' + ctr + '] Second Page: ' + this.getTitle());
105
106 // Random password?
107 if(useRandomPassword) {
108 _pass = randomPassword();
109 }
110
111 // Use nicknames list, or (username + number) combo?
112 if(useNicknamesFile) {
113 // Make sure we have a nickname left
114 if(nicknames.length < 1) {
115 throw Error("We're out of nicknames to use!");
116 }
117
118 // Get the first nickname off the list & use it
119 _nick = nicknames.shift();
120
121 formdata['username'] = _nick;
122 formdata['screen_name'] = _nick;
123 formdata['email'] = email_user + '+' + _nick + '@' + email_domain;
124 formdata['confirm_email'] = email_user + '+' + _nick + '@' + email_domain;
125 } else {
126 // Use username & counter
127 formdata['username'] = _nick;
128 formdata['screen_name'] = _nick;
129 formdata['email'] = email_user + '+' + ctr + '@' + email_domain;
130 formdata['confirm_email'] = email_user + '+' + ctr + '@' + email_domain;
131 }
132
133 // Log it in the file of used nicknames
134 var content = outputFormat.replace('%NICK%', _nick).replace('%PASS%', _pass);
135 fs.write(outputFile, content, 'a');
136
137 formdata['password'] = _pass;
138 formdata['confirm_password'] = _pass;
139
140 // Fill & submit
141 this.fill('form#user-signup-create-account-form', formdata, true);
142}
143
144function handleFinished(ctr) {
145 this.echo('Finished ' + ctr + '.');
146}