Никто не любит выполнять утомительные и повторяющиеся задачи. Я получил электронное письмо, уведомив мне, что мне нужно было отправлять ежедневную «проверку декларации здоровья» в качестве формы на веб -сайте, прежде чем играть в мои любимые слоты на https://gamblersarea.com/ Анкет Поскольку я веду скучный и обычный образ жизни, я подумал, что автоматизирую эту задачу. Было бы хорошим оправданием, чтобы обновить мои знания по модулю запросов Python, а также получить больше опыта работы с рабочих мест Cron.
Используя встроенные инструменты Firefox Dev, мы видим, что веб-форма состоит из довольно стандартной теги HTML-формы, отправленной через запрос HTTP POST. Веб -трафик движется в запросах и ответах.
HTTP -запросы отправляются хостами (ваш браузер или компьютер) для конкретных веб -ресурсов, на которые затем отвечают ответы HTTP, которые предоставляют запрошенный веб -ресурс.
Запросы поставляются в нескольких ароматах, но наиболее распространенными запросами являются запросы на получение запросов и публикации. Получить запросы – это http -запросы, обычно отправляемые для «получить» или получить информацию из Интернета, в то время как запросы на почту используются для отправки или «публикации» данных в Интернет (это может добавить сообщение в блоге, делать комментарий в социальных сетях или в Наш случай, отправив веб -форму) Запросы публикации разделены на 2 секции, называемые головой, которые содержат заголовки, и тело. Для этого конкретного запроса заголовок занимает первые 15 строк запроса, и тело нашего запроса начинается на линии 17.
Мы можем видеть, где каждое из полей в форме соответствует полям в строке 17 запроса. Таким образом, мы можем написать какой -то код для изменения содержимого, представленного в строке 17 в зависимости от дня недели и где я буду в тот день.
Теперь, когда у нас есть некоторое представление о том, как выглядит действительный HTTP -запрос и соответствующий ответ, мы можем использовать Python и его модуль запроса для создания и отправить наш собственный запрос HTTP Post, чтобы помочь нам автоматически.
#!/usr/bin/python3 import requests import datetime URL = "https://some-endpoint/somewhere/admin-ajax.php" headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0', 'accept': 'application/json, text/javascript, */*; q=0.01', 'accept-language': 'en-US,en;q=0.5', 'accept-encoding': 'gzip, deflate', 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', 'x-requested-with': 'XMLHttpRequest', 'content-length':'661', 'origin': 'https://some.origin.com', 'DNT': '1', 'Connection': 'close', 'cookie': 'TawkConnectionTime=0', 'sec-gpc': '1' } usual_places = { "home": "Home", 0: "Era", 1: "Past", 2: "Cashflow", 3: "Dreams-of-flight", 4: "Stallion-Cooper-Coffee", 5: "Ministop" } url_encoded_comma = '%2C' day = datetime.datetime.today().day if (day < 10): day = '0'+str(day) else: day = str(day) month = datetime.datetime.today().month if (month < 10): month = '0'+str(month) else: month = str(month) home = usual_places['home'] places = usual_places[4]+url_encoded_comma+'+'+usual_places[5] data = "action=formcraft3_form_submit&field1%5B%5D=T%E1%BB%9C+KHAI+Y+T%E1%BA%BE+H%C3%80NG+NG%C3%80Y%2F+DAILY+HEALTH+DECLARATION+FORM+2021&field19=&field3%5B%5D=Avery+Tan&field20=+&field14="+day+"%2F"+month+"%2F2021&field6%5B%5D=B%C3%ACnh+th%C6%B0%E1%BB%9Dng%2FNormal&field25%5B%5D=&field9%5B%5D="+places+"&field21="+home+"&field30%5B%5D=Kh%C3%A1c%2FOthers&field32%5B%5D=&field33%5B%5D=&field34%5B%5D=&field35%5B%5D=&field36%5B%5D=I+use+Grab&field18%5B%5D=I+agree&field28=&website=&id=51&location=https%3A%2F%2F%2F%2F&emails=&hidden=field25, field32, field33, field34, field35&redirect=&type=all&triggerIntegration=undefined" r = requests.post(url = URL, headers = headers, data = data) # for logging time_now = str(datetime.datetime.now()) print(time_now + '. Request sent. Response is ' + r.text+ '\n\n') f = open('/home/kali/Documents/health-automated/health-logs','a+') f.write(time_now + '. Request sent. Response is ' + r.text+ '\n\n') f.close()
Я сопоставляю заголовки в словаре Python, а также использую еще один словарь, чтобы записать мои интересные места.
Я выполняю некоторую логику, чтобы гарантировать, что дата представлена в формате, который ожидает форма.
Наконец, я добавляю эти переменные в свою строку данных, которая будет сформировать тело нашего запроса POST, прежде чем наконец отправить запрос.
Теперь, когда у нас есть наш простой сценарий Python, теперь нам нужно запланировать
Работа Cron-это планировщик заданий на основе Unix, где пользователи могут настроить
Чтобы запланированный Cronjob запустился в установленное время, компьютер должен работать и подключаться к Интернету во время запланированного задания для выполнения его. Вместо того, чтобы запускать Cronjob с моего ноутбука и убедиться, что он включен и подключен в запланированное время выполнения, я собираюсь использовать Deth* (произносится Deathstar), мой сервер Raspberry Pi 4, который я подключил к задней части телевизор в моей комнате. Это машина Kali, которую я использую для легких, подробных, тщательных сканирований, оставляя мой ноутбук, работающий в течение 8 часов, не является вариантом.
Я использую DataPlicity, которая предлагает VPN-подобную услугу для удаленного подключения к вашему Raspberry Pi без необходимости настраивать порт вперед или иметь дело с любыми динамическими службами DNS. Используя DataPlicity, я могу удаленно получить доступ к Deth*, где бы у меня был интернет.
Cronjobs может быть запланировано на основе каждого пользователя через то, что называется Crontab. Чтобы получить доступ к конкретному пользователю Crontab, мы делаем это через
crontab -e
Синтаксис команды Cronjob представляет собой 5 дополнительных параметров, за которыми следуют команда, которую вы хотите запустить в указанное время. Я управляю своим Cronjob в начале 50 -й минуты 2 -го часа дня или в 02 50 UTC, которое составляет около 9,50 утра по местному времени.
Я также перенаправляю выход из файла Python в журналы, чтобы периодически проверять, чтобы убедиться, что Cronjob работает как ожидалось.
При этом я могу легко отдохнуть, зная, что мои формы отправляются в автоматизированном невнимательном невнимательном манере!
Следи за мной на Твиттере: @vis1na
Оригинал: “https://dev.to/fusleor/automating-http-form-submissions-using-python-and-cronjobs-3o6c”