Files
GoogleFormsFiller/__init__.py

237 lines
8.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from selenium import webdriver
import time
import requests
import random
import re
import progressbar
from os import path
from bs4 import BeautifulSoup
from datetime import datetime
global driver, banList
banList = []
if path.exists('./ban_list.txt'):
f = open('./ban_list.txt')
for line in f.readlines():
banList.append(line.lower())
f.close()
professionsList = []
if path.exists('./professions_list.txt'):
f = open('./professions_list.txt')
for line in f.readlines():
banList.append(line.lower())
f.close()
weightsList = {}
if path.exists('./weights_list.txt'):
f = open('./weights_list.txt')
for line in f.readlines():
question = line.split(':')[0]
if question[-1:] == ' ':
question = question[:-1]
weights = line.split(':')[1].split()
weightsList[question] = weights
f.close()
def button_by_text(text): # получение кнопки по тексту на ней
try:
button = driver.find_element_by_xpath(
f'//*[contains(text(), "{text}")]')
button.click()
return True
except Exception:
return False
def get_profession(): # получение случайной профессии в РФ, где 1 и 2 диапазон - профессии рабочих, 2 и 3 - должности служащих
global banList
coin = (1, 2, 3, 4)
coin = random.choices(coin, [0.1, 0.1, 0.4, 0.4], k=1)[0]
while True:
if coin == 1:
code = random.randint(10003, 19975)
elif coin == 2:
code = random.randint(30018, 33270)
elif coin == 3:
code = random.randint(20001, 27933)
else:
code = random.randint(40064, 47110)
page = requests.get(f'http://okpdtr.ru/?s={code}').text
soup = BeautifulSoup(page, features='html.parser')
try:
profession = soup.findAll("div", {"class": "my_col2"})[1]
profession = re.sub(r'\([^()]*\)', '', profession.get_text())
if not banList:
return profession
if not_in_ban_list(profession):
return profession
except:
pass
def not_in_ban_list(word):
global banList
wordLowReg = word.lower() # проверка на наличие слов из бан-листа
for badWord in banList:
if badWord in wordLowReg:
return False
return True
def profile_maker():
global driver
forms_list = driver.find_elements_by_class_name(
'freebirdFormviewerViewItemsItemItem') # получение форм со страницы
for form in forms_list:
header = form.find_element_by_class_name(
'freebirdFormviewerViewItemsItemItemHeader').text # получение заголовка формы
if header[-1:] == '*':
header = header[:-2]
if header == 'Укажите Ваш пол':
buttons_list = form.find_elements_by_class_name(
'appsMaterialWizToggleRadiogroupRadioButtonContainer') # получение кнопок-радио с формы
button = random.choices(buttons_list, [0.7, 0.3], k=1)[0]
button.click()
elif header == 'Укажите Ваш возраст (полных лет)':
age = random.randint(18, 56)
field = form.find_elements_by_class_name('quantumWizTextinputPaperinputInput')[
0] # получение полей для ввода с формы
field.click()
field.send_keys(age)
elif header == 'Укажите Ваше образование (возможно несколько вариантов)':
buttons_list = form.find_elements_by_class_name(
'quantumWizTogglePapercheckboxEl') # получение чекбоксов с формы
buttons_list[random.randint(0, 4)].click()
elif header == 'Выберите из списка основную сферу деятельности организации, в которой Вы сейчас работаете':
form.find_elements_by_class_name(
'quantumWizMenuPaperselectOption')[0].click()
coin = random.randint(3, 24)
time.sleep(1)
variants_list = form.find_element_by_xpath(
f'//*[@id="mG61Hd"]/div/div/div[2]/div[5]/div/div[2]/div[2]/div[{coin}]') # перебор элементов выпадающего списка
variants_list.click()
time.sleep(1.5)
elif header == 'Укажите Ваш стаж работы (полных лет) в указанной организации':
buttons_list = form.find_elements_by_class_name(
'appsMaterialWizToggleRadiogroupRadioButtonContainer') # получение кнопок-радио с формы
buttons_list[random.randint(0, len(buttons_list) - 1)].click()
elif header == 'Укажите тип Вашей должности':
buttons_list = form.find_elements_by_class_name(
'appsMaterialWizToggleRadiogroupRadioButtonContainer') # получение кнопок-радио с формы
buttons_list[random.randint(0, len(buttons_list) - 1)].click()
elif header == 'Укажите название Вашей должности':
field = form.find_elements_by_class_name('quantumWizTextinputPapertextareaInput')[
0] # получение полей для ввода с формы
field.click()
# field.send_keys(random.choice(professionsList))
field.send_keys(get_profession())
elif header == 'Укажите Ваш стаж работы в текущей должности (полных лет)':
buttons_list = form.find_elements_by_class_name(
'appsMaterialWizToggleRadiogroupRadioButtonContainer') # получение кнопок-радио с формы
buttons_list[random.randint(0, len(buttons_list) - 1)].click()
def smart_buildozer():
global driver
forms_list = driver.find_elements_by_class_name(
'freebirdFormviewerViewItemsItemItem') # получение форм со страницы
for form in forms_list:
header = form.find_element_by_class_name(
'freebirdFormviewerViewItemsItemItemHeader').text # получение заголовка формы
if header[-1:] == '*':
header = header[:-2]
buttons_list = form.find_elements_by_class_name(
'appsMaterialWizToggleRadiogroupRadioButtonContainer') # получение кнопок-радио с формы
button = random.choices(buttons_list, weightsList[header], k=1)[0]
button.click()
def bulldozer():
global driver
forms_list = driver.find_elements_by_class_name(
'freebirdFormviewerViewItemsItemItem') # получение форм со страницы
for form in forms_list:
header = form.find_element_by_class_name(
'freebirdFormviewerViewItemsItemItemHeader').text # получение заголовка формы
if header[-1:] == '*':
header = header[:-2]
buttons_list = form.find_elements_by_class_name(
'appsMaterialWizToggleRadiogroupRadioButtonContainer') # получение кнопок-радио с формы
buttons_list[random.randint(0, len(buttons_list) - 1)].click()
def main():
global driver
url = 'https://docs.google.com/forms/d/1f716YOLUrKhtjTlR4hYiEWkgwjqylR5fCPxWsHQKJqY'
# url = int(input('Введите ссылку на форму: '))
respondents = int(input(datetime.now().strftime(
'[%X] ') + 'Введите желаемое число респондентов: '))
options = webdriver.firefox.options.Options()
options.headless = True
driver = webdriver.Firefox(options=options)
print(datetime.now().strftime('[%X] ') + 'Начато')
with progressbar.ProgressBar(max_value=respondents) as bar:
for i in range(respondents):
bar.update(i)
driver.get(url)
button_by_text('Далее')
profile_maker()
while True:
if button_by_text('Далее'):
bulldozer()
else:
button_by_text('Отправить')
break
driver.close()
print(datetime.now().strftime('[%X] ') + 'Завершено')
if __name__ == '__main__':
try:
main()
exec Exeption:
driver.close()