-
Notifications
You must be signed in to change notification settings - Fork 0
/
codigo-para-refator.js
183 lines (147 loc) · 4.01 KB
/
codigo-para-refator.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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
const { Builder, Browser, By } = require('selenium-webdriver')
const fs = require('fs')
// feedbacks Glassdoor de hoje até 22 de jul. de 2022
class Feedback {
set cargo(cargo) {
this._cargo = cargo
}
set date(date) {
this._date = date
}
set pros(pros) {
this._pros = pros
}
set contra(contra) {
this._contra = contra
}
}
const dados = []
let c = 2
TorcerPraDarCerto()
function TorcerPraDarCerto(c = 2) {
async function handleFeedbacks() {
//"inicia" o driver
let driver = await new Builder().forBrowser(Browser.CHROME).build();
/**
* site de onde pego os dados
* identifiquei que é esse _P na url que indica o número da página que está mostrando os feedbacks
* logo, é por meio de interpolação que eu vou fazer a manipulação de cada página que será exibida
*/
await driver.get(`https://www.glassdoor.com.br/Avalia%C3%A7%C3%B5es/Simpress-Avalia%C3%A7%C3%B5es-E222101_P${c}.htm?sort.sortType=RD&sort.ascending=false&filter.iso3Language=por&filter.employmentStatus=REGULAR&filter.employmentStatus=PART_TIME`)
//pega a div que envolver todo o Feedback
//retorna uma lista de feedbacks
let feedbacks = await driver.findElements(By.className('empReview'))
return feedbacks
}
handleFeedbacks().then(listOfFeedbacks => {
//mapeia cada item da lista e pega os dados específicos de de cada uma
listOfFeedbacks.map(ContentFeedback => {
//para cada ContentFeedback, vai instanciar um novo objeto e novo array
let userFeedback = new Feedback()
// CARGO
ContentFeedback.findElement(By.className("eg4psks0")).getText()
.then(cargo => userFeedback.cargo = cargo)
// DATA DO POST
ContentFeedback.findElement(By.className("common__EiReviewDetailsStyle__newGrey")).getText()
.then(date => userFeedback.date = date)
// PRÓS
ContentFeedback.findElement(By.css("span[data-test='pros']")).getText()
.then(pros => userFeedback.pros = pros)
// CONTRA
ContentFeedback.findElement(By.css("span[data-test='cons']")).getText()
.then(contra => {
userFeedback.contra = contra
dados.push(userFeedback)
/**
* é 10 pois para cada página de feedbacks tem 10
* logo, quando bater 10, ele vai fazer a requisição com a url de outra página, com outros 10 feedbacks
*/
if (dados.length >= 10) {
medir(dados)
}
})
})
})
}
function medir(dados) {
switch (dados.length) {
case 10:
c++
console.log('tem 10')
TorcerPraDarCerto(c)
break;
case 20:
c++
console.log('tem 20')
TorcerPraDarCerto(c)
break;
case 30:
c++
console.log('tem 30')
TorcerPraDarCerto(c)
break;
case 40:
c++
console.log('tem 40')
TorcerPraDarCerto(c)
break;
case 50:
c++
console.log('tem 50')
TorcerPraDarCerto(c)
break;
case 60:
c++
console.log('tem 60')
TorcerPraDarCerto(c)
break;
case 70:
c++
console.log('tem 70')
TorcerPraDarCerto(c)
break;
case 80:
c++
console.log('tem 80')
TorcerPraDarCerto(c)
break;
case 90:
c++
console.log('tem 90')
TorcerPraDarCerto(c)
break;
case 100:
c++
console.log('tem 100')
TorcerPraDarCerto(c)
break;
case 110:
c++
console.log('tem 110')
TorcerPraDarCerto(c)
break;
case 120:
c++
console.log('tem 120')
TorcerPraDarCerto(c)
break;
case 130:
c++
console.log('tem 130')
TorcerPraDarCerto(c)
break;
// case 140:
// c++
// console.log('tem 140')
// TorcerPraDarCerto(c)
// break;
case 140:
let arr = JSON.stringify(dados)
console.log(arr)
fs.writeFile('feedbacks.json', arr, (err) => {
if (err) throw err;
console.log("New data added");
})
break;
}
}