Добавлено логирование

This commit is contained in:
2020-04-22 16:39:39 +03:00
parent e913a9642b
commit 398b6f2e6e
2 changed files with 64 additions and 21 deletions

3
.gitignore vendored
View File

@@ -2,4 +2,5 @@
./venv ./venv
./vscode ./vscode
./geckodriver.log ./geckodriver.log
./draft.txt ./draft.txt
./respondents.log

View File

@@ -8,7 +8,11 @@ from os import path
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from datetime import datetime from datetime import datetime
global driver, banList options = webdriver.firefox.options.Options()
options.headless = True
driver = webdriver.Firefox(options=options)
logPath = './respondents.log'
banList = [] banList = []
if path.exists('./ban_list.txt'): if path.exists('./ban_list.txt'):
@@ -36,6 +40,15 @@ if path.exists('./weights_list.txt'):
f.close() f.close()
def log(header, data=None):
with open(logPath,'a') as f:
f.write(datetime.now().strftime('[%X] ') + header +'\n')
if data:
for key, value in data.items():
f.write(f' {key}: {value}\n')
f.write('\n')
def button_by_text(text): # получение кнопки по тексту на ней def button_by_text(text): # получение кнопки по тексту на ней
try: try:
@@ -95,6 +108,8 @@ def profile_maker():
global driver global driver
profile = {}
forms_list = driver.find_elements_by_class_name( forms_list = driver.find_elements_by_class_name(
'freebirdFormviewerViewItemsItemItem') # получение форм со страницы 'freebirdFormviewerViewItemsItemItem') # получение форм со страницы
for form in forms_list: for form in forms_list:
@@ -107,10 +122,12 @@ def profile_maker():
if header == 'Укажите Ваш пол': if header == 'Укажите Ваш пол':
buttons_list = form.find_elements_by_class_name( buttons_list = form.find_elements_by_class_name(
'appsMaterialWizToggleRadiogroupRadioButtonContainer') # получение кнопок-радио с формы 'docssharedWizToggleLabeledContainer') # получение кнопок-радио с формы
button = random.choices(buttons_list, [0.7, 0.3], k=1)[0] button = random.choices(buttons_list, [0.7, 0.3], k=1)[0]
button.click() button.click()
profile['Пол'] = button.text
elif header == 'Укажите Ваш возраст (полных лет)': elif header == 'Укажите Ваш возраст (полных лет)':
age = random.randint(18, 56) age = random.randint(18, 56)
field = form.find_elements_by_class_name('quantumWizTextinputPaperinputInput')[ field = form.find_elements_by_class_name('quantumWizTextinputPaperinputInput')[
@@ -118,42 +135,64 @@ def profile_maker():
field.click() field.click()
field.send_keys(age) field.send_keys(age)
profile['Возраст'] = age
elif header == 'Укажите Ваше образование (возможно несколько вариантов)': elif header == 'Укажите Ваше образование (возможно несколько вариантов)':
buttons_list = form.find_elements_by_class_name( buttons_list = form.find_elements_by_class_name(
'quantumWizTogglePapercheckboxEl') # получение чекбоксов с формы 'docssharedWizToggleLabeledContainer') # получение чекбоксов с формы
buttons_list[random.randint(0, 4)].click() coin = random.randint(0, 4)
buttons_list[coin].click()
profile['Образование'] = buttons_list[coin].text
elif header == 'Выберите из списка основную сферу деятельности организации, в которой Вы сейчас работаете': elif header == 'Выберите из списка основную сферу деятельности организации, в которой Вы сейчас работаете':
form.find_elements_by_class_name( form.find_elements_by_class_name(
'quantumWizMenuPaperselectOption')[0].click() 'quantumWizMenuPaperselectOption')[0].click()
coin = random.randint(3, 24) coin = random.randint(3, 24)
time.sleep(1) time.sleep(0.5)
variants_list = form.find_element_by_xpath( variant = form.find_element_by_xpath(
f'//*[@id="mG61Hd"]/div/div/div[2]/div[5]/div/div[2]/div[2]/div[{coin}]') # перебор элементов выпадающего списка f'/html/body/div/div[2]/form/div/div/div[2]/div[5]/div/div[2]/div[2]/div[{coin}]') # перебор элементов выпадающего списка
variants_list.click()
profile['Сфера'] = variant.text
variant.click()
time.sleep(1.5) time.sleep(1.5)
elif header == 'Укажите Ваш стаж работы (полных лет) в указанной организации': elif header == 'Укажите Ваш стаж работы (полных лет) в указанной организации':
buttons_list = form.find_elements_by_class_name( buttons_list = form.find_elements_by_class_name(
'appsMaterialWizToggleRadiogroupRadioButtonContainer') # получение кнопок-радио с формы 'docssharedWizToggleLabeledContainer') # получение кнопок-радио с формы
buttons_list[random.randint(0, len(buttons_list) - 1)].click() coin = random.randint(0, len(buttons_list) - 1)
buttons_list[coin].click()
profile['Стаж работы'] = buttons_list[coin].text
elif header == 'Укажите тип Вашей должности': elif header == 'Укажите тип Вашей должности':
buttons_list = form.find_elements_by_class_name( buttons_list = form.find_elements_by_class_name(
'appsMaterialWizToggleRadiogroupRadioButtonContainer') # получение кнопок-радио с формы 'docssharedWizToggleLabeledContainer') # получение кнопок-радио с формы
buttons_list[random.randint(0, len(buttons_list) - 1)].click() coin = random.randint(0, len(buttons_list) - 1)
buttons_list[coin].click()
profile['Тип должности'] = buttons_list[coin].text
elif header == 'Укажите название Вашей должности': elif header == 'Укажите название Вашей должности':
field = form.find_elements_by_class_name('quantumWizTextinputPapertextareaInput')[ field = form.find_elements_by_class_name('quantumWizTextinputPapertextareaInput')[
0] # получение полей для ввода с формы 0] # получение полей для ввода с формы
field.click() field.click()
# field.send_keys(random.choice(professionsList)) # field.send_keys(random.choice(professionsList))
field.send_keys(get_profession()) profession = get_profession()
field.send_keys(profession)
profile['Должность'] = profession
elif header == 'Укажите Ваш стаж работы в текущей должности (полных лет)': elif header == 'Укажите Ваш стаж работы в текущей должности (полных лет)':
buttons_list = form.find_elements_by_class_name( buttons_list = form.find_elements_by_class_name(
'appsMaterialWizToggleRadiogroupRadioButtonContainer') # получение кнопок-радио с формы 'docssharedWizToggleLabeledContainer') # получение кнопок-радио с формы
buttons_list[random.randint(0, len(buttons_list) - 1)].click() coin = random.randint(0, len(buttons_list) - 1)
buttons_list[coin].click()
profile['Стаж в текущей должности'] = buttons_list[coin].text
log('Новорожденный', profile)
def smart_buildozer(): def smart_buildozer():
@@ -200,11 +239,9 @@ def main():
respondents = int(input(datetime.now().strftime( respondents = int(input(datetime.now().strftime(
'[%X] ') + 'Введите желаемое число респондентов: ')) '[%X] ') + 'Введите желаемое число респондентов: '))
options = webdriver.firefox.options.Options() print(datetime.now().strftime('[%X] ') + 'Начало')
options.headless = True
driver = webdriver.Firefox(options=options)
print(datetime.now().strftime('[%X] ') + 'Начато') log('Новый опрос')
with progressbar.ProgressBar(max_value=respondents) as bar: with progressbar.ProgressBar(max_value=respondents) as bar:
for i in range(respondents): for i in range(respondents):
@@ -222,6 +259,8 @@ def main():
button_by_text('Отправить') button_by_text('Отправить')
break break
log('Опрошен')
driver.close() driver.close()
print(datetime.now().strftime('[%X] ') + 'Завершено') print(datetime.now().strftime('[%X] ') + 'Завершено')
@@ -229,8 +268,11 @@ def main():
if __name__ == '__main__': if __name__ == '__main__':
'''
try: try:
main() main()
exec Exeption: except:
driver.close() driver.close()
'''
main()