This repository has been archived by the owner on Nov 4, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
scrap.js
88 lines (77 loc) · 3.19 KB
/
scrap.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
const puppeteer = require('puppeteer');
module.exports = class Scraping {
// Esta função deve ser chamada inicialmente para abrir o Chromium
async launchBrowser(){
this.browser = await puppeteer.launch({
headless: true,
args: [
'--proxy-server="direct://"',
'--proxy-bypass-list=*'
]
});
}
// Esta função deve ser chamada para fechar o Chromium
async closeBrowser(){
this.browser.close();
}
// Esta função retorna json com o rastreio do objeto passado como parametro
async track(codigo) {
const page = await this.browser.newPage();
let servico = 'ect';
// tirando inutilidades da pagina
await page.setRequestInterception(true);
page.on('request', (request) => {
if (['image', 'stylesheet', 'font', 'script'].indexOf(request.resourceType()) !== -1) {
request.abort();
} else {
request.continue();
}
});
await page.goto('http://www2.correios.com.br//sistemas/rastreamento/default.cfm/');
await page.click('#objetos');
await page.keyboard.type(codigo);
await Promise.all([
page.click('#btnPesq'),
page.waitForNavigation(),
]);
let historico = [];
//vai criar array elements, processar os dados e inserir no array dados
//historico = array de json
try{
historico = await page.evaluate(() => {
let dados = [];
let elements = document.querySelectorAll('.listEvent');
for (var element of elements) {
let localAndDate = element.querySelector('td').innerText;
localAndDate = localAndDate.split('\n');
let local = localAndDate[2];
let data = localAndDate[0]+' '+localAndDate[1];
let detalhes = element.querySelectorAll('td')[1].innerText;
let situacao = element.querySelectorAll('td')[1].querySelector('strong').innerText;
//Tratando quebra de linha e espaços duplos
//Quebra de linha vira espaço, APÓS os espaços duplos viram espaço simples
//Obs: em caso de espaço+quebra de linha e quebra de linha+espaço, virará espaço+espaço e após apenas espaço
// detalhes = detalhes.replace(/(\r\n|\n|\r)/gm, " ");
detalhes = detalhes.replace(" ", " ");
data = data.replace(/(\r\n|\n|\r)/gm, " ");
data = data.replace(" ", " ");
dados.push({
detalhes,
local,
data,
situacao
});
}
return dados;
});
}
catch(ex){
servico = 'error';
}
finally{
await page.close();
}
// retorna json no formato {String, String, [{datalhes, local, data, situacao}]}
return { codigo, servico, historico };
};
}