Акмалов Артур

Python Google Forms Автозаполнение гугл формы

Python Google forms

Python Google Forms | Авто заполнение гугл форм

Задача

Продолжаю изучать Python на простых заказах (задачах, примерах).

Сегодня увидел заказ на работу, где требовалось написать скрипт для автоматического заполнения Google формы (анкеты, опроса). Скорее всего решили кого-то заспамить, процесс не одобряю, но задача интересная.

Требуется случайная генерация Фамилии, имени, электронной почты, номера телефона и заполнение вариантов анкеты.  

Подготовка поля

Чтобы никому ничего не ломать и не мешать, создаю у себя аналогичную гугл форму для экспериментов. Так же выбрал сохранение результатов в гугл таблицу для удобства работы.

Как и в задаче, Фамилия, Имя, Номер телефона, Email, Пол, Список для множественного выбора, Выбор из выпадающего списка. 

Необходимо заполнить так, чтоб нельзя было отличить от заполнения живого человека и при этом в последнем поле выбирать «Mikrotik»

Анализ гугл формы

Для заполнения данных с Python необходимо понять какие данные в эту форму передать. 

Открываю в браузере страницу формы и включаю режим разработчика.

Нужны ID заполняемых форм. Копирую их в блокнот и подписываю какой за что отвечает:

emailAddress: email
entry.1745782649: Фамилия Имя
entry.1065332859: Телефон
entry.1671460138: Лучший производитель из списка
entry.1180824424: Пол (Radio button)
entry.2064015836: Выберите слова которые сможете расшифровать полностью (Check list)

Так же в режиме разработчика, есть более простой способ собрать эти данные.

  1. Заполняем таблицу
  2. Отправляем
  3. Вкладка Network
  4. name — formRespone
  5. Поле Form Data

Форму посмотрел, как заполняется понял перехожу к коду

Python отправка данных в Google Forms

Для отправки данных в гугл форму использую библиотеку requests.

pip install requests 

Копирую ссылку на форму в значение GoogleURL и заполняю поле form_data с нужными значениями.

import requests

GoogleURL = 'https://docs.google.com/forms/d/e/1FAIpQLSdBfczTD5A5IRcQEyBM2Id9cbRigaalPiDCaQhA_c4NawN0pA'

urlResponse = GoogleURL+'/formResponse'
urlReferer = GoogleURL+'/viewform'

form_data = {'entry.1745782649': 'Фамилия Имя',
            'entry.1180824424':'Муж',
            'entry.2064015836': {'RSTP','DHCP'},
            'entry.1671460138':'Mikrotik',
            'emailAddress':'test@mail.ru',
            'entry.1065332859':'+79091505050'             }
user_agent = {'Referer':urlReferer,'User-Agent': "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36"}
r = requests.post(urlResponse, data=form_data, headers=user_agent) 

Такой простой код для проверки можно запустить и получить результаты, убедится что форма отправки работает.

Теперь необходимо сгенерировать данные

Python mimesis генерация данных человека

Для генерации данных о человеке использую библиотеку mimesis.

pip install mimesis 

Очень интересная библиотека подробнее ознакомиться можно на официальном сайте, статья на хабр.

Пример

import mimesis
from mimesis import Person
from mimesis import locales

pers = Person(locales.RU)
GenderList = ['MALE', 'FEMALE']
if random.choice(GenderList) == 'MALE':
    GenRandom = mimesis.enums.Gender.MALE
    Gender = 'Муж'
else:
    GenRandom = mimesis.enums.Gender.FEMALE
    Gender = 'Жен'

name = pers.full_name(GenRandom)
email = pers.email(domains=['mail.ru','yandex.ru','list.ru','gmail.com','bk.ru'])
phone = pers.telephone(mask='+7(9##)#######')

print(f'{name}, {Gender}, {email}, {phone}') 
Вывод: Эльга Левашова, Жен, lionka1922@yandex.ru, +7(950)4904305
  • Выбрал русскую локализацию.
  • Случайный выбор пола
  • Генерация имени
  • Генерация email почты
  • Генерация номера телефона

Для почты выбрал русские домены, т.к. по умолчанию он использует outlook.com, yahoo.com, live.com. Добавил более стандартные для России домены

Так же добавил маску для телефона в более привычном формате, можно еще использовать случайные маски т.к. разные люди по своему заполняют телефон. 

Для случайного выбора из разных вариантов в форме добавляю их в список и вытаскиваю случайное значение из словаря

check_list = ['RSTP', 'IPSEC', 'DHCP', 'DNS', 'MSTP']
random.choice(check_list) 

Важно значения должно быть точно такими же как на форме, иначе не примет ответ. Даже если регистр не совпадает.

Кроме этого можно с помощью mimesis генерировать другие данные:

pers = Person(mimesis.locales.RU)

print("Научная степень:", pers.academic_degree())
print("Национальность:", pers.nationality())
print("Работа:", pers.occupation())
print("Университет:", pers.university())

>>> Научная степень: Специалист
>>> Национальность: Англичанка
>>> Работа: Бармен
>>> Университет: Государственная морская академия имени адмирала С.О. Макарова 

Адресные данные:

adrRU = Address(mimesis.locales.RU)
print("Адрес:", adrRU.address())
print("Город:", adrRU.city())
print("Координаты:", adrRU.coordinates())
print("Улица:", adrRU.street_name())
>>> Адрес: ул. Лихоборская 73
>>> Город: Волгореченск
>>> Координаты: {'longitude': -44.258845, 'latitude': 50.719573}
>>> Улица: Украинская 

Данные времени:

dt = Datetime(mimesis.locales.RU)
print("Случайная полная дата:", dt.datetime(1998, 2045), type(dt.datetime(1998, 2045)))
print("Случайная дата:", dt.date(1998, 2045), type(dt.date(1998, 2045)))
print("Дата форматированная:", dt.formatted_datetime("%m_%d_%y %H:%M:%S"))
print("День недели:", dt.day_of_week(), dt.day_of_week(abbr=True))
print("Периодичность:", dt.periodicity())
print("Век:", dt.century())

>>> Случайная полная дата: 2029-01-21 01:59:42.671179 <class 'datetime.datetime'>
>>> Случайная дата: 2019-06-11 <class 'datetime.date'>
>>> Дата форматированная: 04_10_06 10:11:03
>>> День недели: Вторник Вт.
>>> Периодичность: Ежедневно
>>> Век: XXI 

Итоги

В результате получился вот такой код. Осталось только поставить случайный интервал времени и запускать.

import requests
import mimesis
from mimesis import Person
from mimesis import locales
import random

GoogleURL = 'https://docs.google.com/forms/d/e/1FAIpQLSdBfczTD5A5IRcQEyBM2Id9cbRigaalPiDCaQhA_c4NawN0pA'

urlResponse = GoogleURL+'/formResponse'
urlReferer = GoogleURL+'/viewform'

pers = Person(locales.RU)
GenderList = ['MALE', 'FEMALE']
if random.choice(GenderList) == 'MALE':
    GenRandom = mimesis.enums.Gender.MALE
    Gender = 'Муж'
else:
    GenRandom = mimesis.enums.Gender.FEMALE
    Gender = 'Жен'

name = pers.full_name(GenRandom)
email = pers.email(domains=['mail.ru','yandex.ru','list.ru','gmail.com','bk.ru'])
phone = pers.telephone(mask='+7(9##)#######')

print(f'{name}, {Gender}, {email}, {phone}')

check_list = ['RSTP', 'IPSEC', 'DHCP', 'DNS', 'MSTP']

form_data = {'entry.1745782649': name,
            'entry.1180824424':Gender,
            'entry.2064015836': {random.choice(check_list),random.choice(check_list)},
            'entry.1671460138':'Mikrotik',
            'emailAddress':email,
            'entry.1065332859':phone
             }
user_agent = {'Referer':urlReferer,'User-Agent': "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36"}
r = requests.post(urlResponse, data=form_data, headers=user_agent)
 

Если кто подскажет как улучшить код, сделать красивее и изящнее, буду только рад.

Ссылка на GitHub

Пример как будет выглядеть
Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Влад

процесс не одобряю, но задача интересная.

Это явно спамеры, но с выражения улыбнуло)
xD

На телефонах 100% нужны случайные маски т.к. сильно выделяется. И имена очень своеобразные)

Последний раз редактировалось 10 дней назад Влад ем