Skip to content

Commit cafa07a

Browse files
王向榮王向榮
authored andcommitted
change casperjs to puppeteer
1 parent 8bfa04d commit cafa07a

2 files changed

Lines changed: 62 additions & 51 deletions

File tree

js/kktix.js

Lines changed: 60 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,77 @@
1-
var debug = false;
2-
if (debug) {
3-
options = {
4-
verbose: true,
5-
logLevel: "debug"
6-
};
7-
} else {
8-
options = {};
1+
var params = {};
2+
for (var argv of process.argv) {
3+
var matches = argv.match(/^--([^=]*)=(.*)$/);
4+
if (matches) {
5+
params[matches[1]] = matches[2];
6+
}
97
}
10-
options.waitTimeout = 20000;
118

129
var config = require('../config');
13-
var casper = require('casper').create(options);
10+
const puppeteer = require('puppeteer');
1411

1512
/* login */
16-
casper.start('https://kktix.com/users/sign_in');
17-
18-
casper.waitForSelector('form', function() {
19-
this.fill('form[action="/users/sign_in"]', {
20-
'user[login]': config.KKTIX.login,
21-
'user[password]': config.KKTIX.password
22-
}, true);
23-
});
24-
25-
/* confirm if logged in */
26-
casper.waitForSelector('#nav-user-display-id', function() {
27-
var user = this.evaluate(function() {
28-
return document.querySelector('#nav-user-display-id').textContent;
13+
(async () => {
14+
const browser = await puppeteer.launch({
2915
});
30-
casper.log('User Name: ' + user, 'debug');
31-
});
16+
const page = await browser.newPage();
17+
page.on('console', (msg) => console.log('PAGE LOG:', msg.text()));
3218

33-
/* fork event from template */
34-
casper.thenOpen('https://kktix.com/dashboard/organizations/' + config.KKTIX.organization + '/events/new?fork_from=' + config.KKTIX.template, function() {
19+
await page.goto('https://kktix.com/users/sign_in');
3520

36-
var name = casper.cli.get("slug").replace('-', ' ') + ' | 台灣零時政府' + casper.cli.get("name");
21+
console.log('login to kktix');
22+
await page.waitForSelector('form');
23+
await page.type('#user_login', config.KKTIX.login);
24+
await page.type('#user_password', config.KKTIX.password);
25+
await page.click('[type=submit]');
3726

38-
this.fill('form#new-event', {
39-
'event[name]': name,
40-
'event[slug]': casper.cli.get("slug"),
41-
'event[start_at]': casper.cli.get("start_at"),
42-
'event[end_at]': casper.cli.get("end_at")
43-
}, true);
4427

45-
this.click('.breadcrumb li:nth-child(2)');
28+
console.log('login to kktix done');
29+
/* confirm if logged in */
30+
await page.waitForSelector('#nav-user-display-id');
4631

47-
var end_date_str = casper.cli.get("end_at");
32+
/* fork event from template */
33+
await page.goto('https://kktix.com/dashboard/organizations/' + config.KKTIX.organization + '/events/new?fork_from=' + config.KKTIX.template);
34+
35+
var name = params["slug"].replace('-', ' ') + ' | 台灣零時政府' + params['name'];
36+
37+
await page.evaluate( (name) => document.getElementById("event_name").value = name, name);
38+
await page.evaluate( (slug) => document.getElementById("event_slug").value = slug, params['slug']);
39+
await page.evaluate( (start_at) => document.getElementById("event_start_at").value = start_at, params['start_at']);
40+
await page.evaluate( (end_at) => document.getElementById("event_end_at").value = end_at, params['end_at']);
41+
42+
await page.click('.breadcrumb li:nth-child(2)');
43+
var end_date_str = params['end_at'];
4844
var end_date = end_date_str.split(' ');
4945

50-
this.fill('form#new-event', {
51-
'tickets[][start_at]': casper.cli.get("signup_at") + ' 12:00',
52-
'tickets[][end_at]': end_date[0] + ' 9:00'
53-
}, true);
54-
46+
await page.evaluate( (signup_at) => {
47+
nodes = document.querySelectorAll('[name="tickets[][start_at]"]');
48+
for (var i = 0; i < nodes.length; i ++) {
49+
node = nodes[i];
50+
node.value = signup_at;
51+
}
52+
}, params['signup_at'] + ' 12:00');
53+
54+
await page.evaluate( (end_at) => {
55+
nodes = document.querySelectorAll('[name="tickets[][end_at]"]');
56+
for (var i = 0; i < nodes.length; i ++) {
57+
node = nodes[i];
58+
node.value = end_at;
59+
}
60+
}, end_date[0] + ' 09:00');
61+
62+
await page.waitForSelector('.breadcrumb li:nth-child(3)');
63+
await page.click('.breadcrumb li:nth-child(3)');
5564

56-
this.click('.breadcrumb li:nth-child(3)');
57-
58-
});
65+
await page.waitForSelector('[name="formSettings[type]"]:nth-child(1)');
66+
await page.click('[name="formSettings[type]"]:nth-child(1)');
5967

60-
casper.waitForSelector('button[type="submit"]', function() {
61-
document.querySelector('button[type="submit"]').click();
62-
});
68+
await page.waitForSelector('[name="hasOrderDataDeadline"]:nth-child(1)');
69+
await page.click('[name="hasOrderDataDeadline"]:nth-child(1)');
6370

71+
await page.screenshot({ path: 'all.png' });
72+
await page.waitForSelector('button[type="submit"]');
73+
await page.click('button[type="submit"]');
74+
await page.screenshot({ path: 'all.png' });
6475

65-
casper.run();
76+
await browser.close();
77+
})();

package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,20 @@
2121
"homepage": "https://github.com/g0v/OneButton#readme",
2222
"dependencies": {
2323
"babel-cli": "^6.23.0",
24-
"casperjs": "^1.1.1",
2524
"cheerio": "^0.20.0",
2625
"child-process-promise": "^2.2.0",
2726
"classnames": "^2.2.5",
2827
"es6-promise": "^3.2.1",
2928
"google-auth-library": "^0.9.8",
3029
"googleapis": "^12.0.0",
31-
"hackpad": "jessy1092/node-hackpad#master",
30+
"hackpad": "github:jessy1092/node-hackpad#master",
3231
"http-client": "^4.1.0",
3332
"inquirer": "^1.0.3",
3433
"isomorphic-fetch": "^2.2.1",
3534
"koa": "^2.0.1",
3635
"koa-router": "next",
3736
"moment-natural": "^0.0.2",
38-
"phantomjs": "^2.1.1",
37+
"puppeteer": "*",
3938
"ramda": "^0.21.0",
4039
"react": "^15.4.2",
4140
"react-dom": "^15.4.2",

0 commit comments

Comments
 (0)