-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
138 lines (130 loc) · 5.83 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
const puppeteer = require('puppeteer');
let namePlaces = [
"La cittadella",
"Chioggia",
"Dolo ospedale",
"Dolo palazzetto dello sport",
"Lido di venezia",
"Mira",
"Mirano bocciodromo",
"Mirano bocciodromo aggiuntivo",
"Venezia - ospedale SS Giovanni",
"Venezia - Pala Expo",
"Venezia - Rampa santa chiara"
];
const user = {
name: "",
surname: "",
email: "@gmail.com",
fiscalCode: "",
idFiscalCode: "",
phone: "",
places: [
false, //La cittadella
false, //Chioggia
false, //Dolo ospedale
false, //Dolo palazzetto dello sport
false, //Lido di venezia
true, //Mira
true, //Mirano bocciodromo
true, //Mirano bocciodromo aggiuntivo
false, //Venezia - ospedale SS Giovanni
true, //Venezia - Pala Expo
false //Venezia - Rampa santa chiara
],
maxDate: new Date("2021/06/27")
};
const ulssLink = "https://vaccinicovid.regione.veneto.it/ulss3";
(async () => {
let reservation = true;
const browser = await puppeteer.launch({
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
let page;
let isAvailable;
while (reservation) {
try {
page = await browser.newPage();
await page.setDefaultNavigationTimeout(0);
await page.goto(ulssLink);
// PRIMA PAGINA
await page.type('#cod_fiscale', user.fiscalCode);
await page.type('#num_tessera', user.idFiscalCode);
//await page.click('input[type="checkbox"]:nth-child(1)');
let button = await page.$$('input[type="checkbox"]');
await button[1].click();
await page.click('.btn-primary');
await page.waitForTimeout(800);
await page.click('button[onclick="scegliserv(178)"]');
console.log("[1] - Dati inseriti correttamente")
await page.waitForTimeout(800);
await page.screenshot({
fullPage: true,
path: '' + user.name + user.surname + 'test.png'
})
for (let i = 0; i < 11; i++) {
if (user.places[i]) {
isAvailable = (await page.$('button.btn.btn-primary.btn-full:nth-child(' + (i + 3) + ')[disabled]')) == null;
if (isAvailable) {
await page.click('.btn-full:nth-child(' + (i + 3) + ')');
console.log("[2] - Trovata una prenotazione libera a " + namePlaces[i]);
await page.waitForTimeout(800)
try {
// Prende tutte le date disponibili
let dates = await page.$$('td.highlight');
// Se non ci sono date l'esecuzione del programma viene arrestata
if (dates == [] || dates.length == 0) {
await page.click('button[aria-label="next"]');
dates = await page.$$('td.highlight');
if (dates == [] || dates.length == 0)
throw ("Non ci sono date");
}
// Viene selezionata la prima data disponibile
let hrefElement = await page.$('td.highlight:nth-child(1)');
let attr = await page.$$eval("td.highlight:nth-child(1)", el => el.map(x => x.getAttribute("data-date")));
if (hrefElement == null || hrefElement == undefined) {
hrefElement = await page.$("td.highlight");
attr = await page.evaluate(el => el.getAttribute("data-date"), hrefElement);
}
console.log((new Date(attr)))
if ((new Date(attr)).getTime() <= user.maxDate.getTime()) {
await hrefElement.click();
await page.waitForTimeout(500)
console.log("[3] - Giorno selezionato");
await page.click('.btn-full');
await page.waitForTimeout(500)
await page.type('input[name="cognome"]', user.surname);
await page.type('input[name="nome"]', user.name);
await page.type('input[name="email"]', user.email);
await page.type('input[name="cellulare"]', user.phone);
await page.screenshot({
fullPage: true,
path: 'resume/' + user.name + user.surname + '_1resume.png'
})
await page.click('#bottoneconferma');
await page.waitForTimeout(800)
await page.screenshot({
fullPage: true,
path: 'resume/' + user.name + user.surname + '_2resume.png'
})
reservation = false;
}
} catch (error) {
console.log("Non ci sono date disponibili per questo mese.")
}
}
}
}
} catch (error) {
await page.screenshot({
fullPage: true,
path: 'error/' + 'error.png'
})
//throw (error);
}
//await page.waitForTimeout(800)
await page.close();
console.log("=========================================================");
}
await browser.close();
})();