|
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 | + } |
9 | 7 | } |
10 | | -options.waitTimeout = 20000; |
11 | 8 |
|
12 | 9 | var config = require('../config'); |
13 | | -var casper = require('casper').create(options); |
| 10 | +const puppeteer = require('puppeteer'); |
14 | 11 |
|
15 | 12 | /* 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({ |
29 | 15 | }); |
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())); |
32 | 18 |
|
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'); |
35 | 20 |
|
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]'); |
37 | 26 |
|
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); |
44 | 27 |
|
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'); |
46 | 31 |
|
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']; |
48 | 44 | var end_date = end_date_str.split(' '); |
49 | 45 |
|
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)'); |
55 | 64 |
|
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)'); |
59 | 67 |
|
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)'); |
63 | 70 |
|
| 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' }); |
64 | 75 |
|
65 | | -casper.run(); |
| 76 | + await browser.close(); |
| 77 | +})(); |
0 commit comments