Перейти к содержимому

Как нажать на кнопку на сайте python requests

  • автор:

Python + Requests как нажать на кнопку

Никак. Можно только посмотреть, куда отправляется запрос по кнопке (если вообще отправляется), и через requests уже отправить запрос.

Отслеживать
ответ дан 28 янв 2021 в 16:43
25 1 1 серебряный знак 7 7 бронзовых знаков

  • python
  • python-3.x
  • requests
  • click
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Python requests, как нажать на кнопку?

Занимаюсь разработкой парсеров на python requests. Какие параметры нужно передавать в http запрос чтобы нажать на кнопку oneclick. Например сайт https://24score.pro/football/match/608022-west_ham. (выбран случайно) есть три кнопки последние 20, 10 и 5 матчей. по умолчанию загружается первая кнопка, но как загружать страницу со второй и третей кнопкой?
Заранее спасибо!

  • Вопрос задан более двух лет назад
  • 2488 просмотров

Комментировать
Решения вопроса 2

SoreMix

soremix @SoreMix Куратор тега Python

Нажать на кнопку через requests — никак.
Все, что вы можете — посмотреть что проиходит при нажатии на кнопку и попытаться повторитьт то же самое действие через requests.

Конкретно на этом сайте все данные изначально загружены на страницу, и при нажатии на кнопки не происходит ничего, кроме переключения вкладок

Ответ написан более двух лет назад
Комментировать
Нравится Комментировать

HemulGM

Hemul GM @HemulGM Куратор тега Python
Delphi Developer, сис. админ

Нажатие на кнопку делает запрос или выполняет скрипт на JS. Ну а JS в свою очередь выполняет запрос или меняет что-то на странице. Если нужно действие, которое происходит на сервере, то достаточно посмотреть какой запрос выполняется после нажатия на кнопку. Посмотреть можно через DevTools почти любого браузера.

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Нажать кнопку на сайте

#1 Ноя. 13, 2015 17:19:02

Valera_idi_syuda Зарегистрирован: 2015-10-09 Сообщения: 13 Репутация: 0 Профиль Отправить e-mail

Нажать кнопку на сайте

Здравстуйте. Как нажать кнопку методами GET и POST?
Чтобы нажать кнопку нужно залогиниться.

import requests url = 'http://www.wolframalpha.com/input/login.jsp' urlauth = 'http://www.wolframalpha.com/input/authjson.jsp' furl = 'http://www.wolframalpha.com/input/wpgtrial.jsp' urlcheck = 'http://www.wolframalpha.com/input/check.auth.jsp' dt = 'username':'31u091ycv9dse59n@my10minutemail.com', 'password':'refertg2tt', > headers = 'User-Agent':'Mozilla/5.0 (Windows NT 5.1; rv:27.0) Gecko/20100101 Firefox/27.0' > s = requests.Session() u = s.get(url, headers=headers) dctnr = eval(u.text) url_step2 = dctnr['url'] i = s.post(url_step2, headers=headers, data=dt) y = s.post(furl, headers=headers)# здесь должно быть "нажатие", но пока только страница с кнопкой o = s.get(urlauth, headers=headers)# здесь видно, что авторизация проходит j = s.get(urlcheck, headers=headers)# print(y.status_code) print(y.headers) print(y.text) print(y.history) print(j.text, o.text) 

Что происходит после нажатия на кнопку

Кнопка

Отредактировано Valera_idi_syuda (Ноя. 13, 2015 18:04:35)

Парсинг сайта с применением авторизации

Любой, кто когда-либо пытался парсить сайты на python начинал с простого запроса «get» библиотеки «requests». Запрос «get» выгружает html код страницы, который можно обрабатывать под свои нужды.

Но иногда данные доступны только после авторизации на ресурсе. В этом посте я покажу, как можно подключаться, используя логин-пароль и библиотеку «requests».

Использование сессий дает преимущества в скорости парсинга данных и исключает блокировку учетной записи. Если приходится выгружать данные — страницу сайта за страницей, при каждом новом запросе будет создаваться новый запрос с новым подключением к сайту, при использовании сессии она создается один раз и используется на всем протяжении работы.

Возьмем сайт https://ivi.ru/ и попытаемся залогиниться.

Для авторизации требуется ввести email и пароль. В библиотеке requests есть метод «POST», с помощью которого реализуются отправки данных на сервер. Общий вид использования метода: «requests.post(url, headers, data)». «url» ссылка на ресурс, «headers» заголовки запроса, «data» данные запроса, которые мы будем передавать.

Импорт, авторизация и исходные параметры

pip install requests

Прежде всего, нужно узнать, откуда брать данные «headers» и «data». Для этого запустим инструмент разработчика. Переходим во вкладку СЕТЬ и обновляем страницу. Здесь видим все активности сети.

На главной странице сайта входим в профиль. Открывается форма авторизации, вводим логин-пароль и нажимаем кнопку ВОЙТИ. Ищем нашу ссылку.

Чтобы быстрее находить нужную строку в отображении полей нужно добавить поле «Method» и по нему отсортировать столбец. Данные на авторизацию отправляются в «POST» запросах.

Находим строку v5/

Смотрим информацию по этой строке

Во вкладке «headers» находим «General» в нем возьмем «url», в «Request Headers» нас интересует только «User-Agent», который пропишем в «headers», в «Form Data» данные для запроса «data».

import requests
url = 'https://api.ivi.ru/mobileapi/user/login/ivi/v5/'
headers = < 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36' >
data =

Создаем сессию, она будет держать наше соединение с сайтом, и мы сможем с ним работать.

session = requests.Session() session.headers.update(headers) response = session.post(url, data=data) 

Смотрим статус ответа

response

Ответ 200 означает успешный ответ от сервера.

Посмотрим, что возвратил наш запрос

response.json()
, 'email': 'test@yandex.ru', 'email_real': 1, 'msisdn': '', 'confirmed': 1, 'storageless': False, 'is_debug': False, 'children': [], 'basic': '0.0000', 'bonus': '0.0000'>> 

Здесь важная строка «session», которая указывает на наш номер сессии. Дальше в примере будет видно, что, если бы мы не создали сессию, изменить данные нам бы не удалось.

Попробуем поменять данные профиля. Нажимаем на кнопку редактировать и меняем имя.

Ищем в инструменте разработчика нашу строку. Чтобы не было много записей, можно сразу же после нажатия кнопки сохранить остановить загрузку страницы, «POST» запрос на изменение будет идти первым, только после этого происходит загрузка страницы с обновленными данными.

Записываем «url» и копируем «data». Необходимо обратить внимание на строку «session», где нужно передать наш номер сессии. Номер берем из ответа сервера.

url_change_nick = 'https://api.ivi.ru/mobileapi/user/info/v5/'
session_id = response.json()['result']['session'] data =
response = session.post(url_change_nick, data=data)

Чтобы удостовериться в работе нашего кода обновляем страницу в браузере.

Наш код успешно сработал.

Использование учетных данных WINDOWS

Также бывают редкие случаи, когда нужно использовать логин-пароль от учетной записи Windows. Для этого можно использовать библиотеку «requests-negotiate-sspi». Она становится особенно полезной, когда часто меняется пароль от учетной записи.

Устанавливаем и импортируем библиотеку, нам нужен метод «HttpNegotiateAuth»

pip install requests_negotiate_sspi from requests_negotiate_sspi import HttpNegotiateAuth 

Повторяем все, что делали выше: прописываем «headers», заполняем «data» и поднимаем сессию. Попробуем получить дату и время сервера.

Вначале сделаем запрос без передачи данных авторизации

xml_request = '''     ''' headers = < 'Host': host_name, 'Content-Type': 'text/xml; charset=utf-8', 'Content-Length': str(len(xml_request)) >session.headers = headers 
response = session.post('http://' + host_name + '/ServerService.asmx?WSDL', data=xml_request) response 

Посмотрим текст ответа

response.text
401 - Unauthorized: Access is denied due to invalid credentials.

Как мы видим ошибка авторизации.

Повторяем запрос с использованием «HttpNegotiateAuth»

response = session.post('http://' + host_name + '/ServerService.asmx?WSDL', auth=HttpNegotiateAuth(), data=xml_request) response.text 
44298.576980902777

Ответ на запрос даты и времени сервера получен успешно.

Sessions позволяет вам использовать requests более эффективно и решать проблемы с подключением к аккаунту, ускорять работу выполнения запросов и исключать блокировку при ограничении количества соединений.

Добавить комментарий

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