1

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

Shataev
  • 11
  • 1
    вы же сами и ответили на свой вопрос, добавив метку request (это слово и есть ответ, только во множественном числе: requests). – aleksandr barakin Nov 14 '23 at 10:57
  • request это парсить, получить данные с сайта. а как отправить туда? это так же через request? я вот не нашел такого запроса request, чтобы отправлять что то на сайт. – Shataev Nov 14 '23 at 10:59
  • протокол http так устроен, что при отправке запросов вы всегда передаёте какие-то данные, а в обязательных ответах на запросы вы всегда какие-то данные получаете. – aleksandr barakin Nov 14 '23 at 11:03
  • gpt говорит так "Библиотека requests в Python предназначена для отправки HTTP-запросов и получения HTTP-ответов. С её помощью вы можете взаимодействовать с веб-сервером, но она не предназначена для внесения изменений на сайте в том смысле, что она не выполняет скрипты на стороне клиента (в браузере).

    Если вы хотите внести изменения на сайте, как если бы вы выполняли действия через браузер, вам, вероятно, потребуется использовать инструменты, поддерживающие выполнение JavaScript. Это может быть, например, библиотека selenium."

    – Shataev Nov 14 '23 at 11:46
  • т.е она говорит, что нельзя изменять какие то данные на сайте через requests, и говорит использовать селениум. но мне нужно без селениума, чисто запросом с питона отправить ввести какие то данные и сохранить. – Shataev Nov 14 '23 at 11:48
  • при http-запросе любого типа всегда отправляются какие-то данные. почитайте подробнее про протокол. можете rfc, можете начать с википедийной статьи, можете просто в любимом поисковике почитать результаты поиска слова «http». // это никак не противоречит процитированному вами. – aleksandr barakin Nov 14 '23 at 12:01
  • https://ru.stackoverflow.com/a/924276/470333 – Сергей Ш Nov 14 '23 at 12:29
  • окей, я примерно разобрался как отправлять данные. но типа, а как нажать на кнопку сохранить через реквест? я что то не нашел. на хабре пишут нельзя. https://qna.habr.com/q/1037784 – Shataev Nov 14 '23 at 12:55
  • Если это html форма (https://www.w3schools.com/html/html_forms.asp), то теоретически можно и через requests. Только не кнопку нажать, а отправить запрос аналогичный отправляемому формой. Но в целом скорее всего Selenium нужен будет. – insolor Nov 14 '23 at 13:52
  • скорее json, но не уверен что так можно. – Shataev Nov 14 '23 at 13:57

1 Answers1

0

Я так понял, что необходимо отправить заполненую форму?

import urllib.request
POST = {'name_of_field' : 'value of field'}
GET='?var=Value'
headers = {'User-Agent': 'Python-Scrypt'}
cookie='' #not empty if auth needed
u_to = urllib.parse.urlencode(POST)
u_to = u_to.encode('ascii')
req=urllib.request.Request('http://sample.com/'+GET, u_to, headers)
req.add_header('cookie', cookie)
u_from=urllib.request.urlopen(req)
cookie = u_from.headers.get('Set-Cookie')
html = u_from.read()
html.decode('utf')

p.s. гпт в программировании плохой помощник,- верно подсказывает лишь элементарные вещи, в остальном лишь вводит в заблуждение.

ganz
  • 1,614
  • 1
  • 3
  • 13
  • я сначала подумал ты написал что то сложное, а потом понял что у тебя какой то особенный стиль написания кода. почему ты используешь urllib.request если можно сразу использовать request? типа, половину кода можно написать как req = request.post(url, 'name_of_field' : 'value of field', cookies=cookies, headers=headers) мб, я просто что то не понял а еще вопрос, ты не знаешь как отправить запрос на нажатие кнопки без использования селениума, если его активация идет через js? – Shataev Nov 15 '23 at 10:15
  • не важно как идёт активация кнопки, важен лишь целевой документ, то есть "браузер-инструменты разраба-хтмл код" находишь код кнопки, и заменяешь http://sample.com/ на тот адрес который в коде кнопки. Возможно ещё придётся подменить реферер или немого потанцевать обходя защиту, но это наврятли. – ganz Nov 15 '23 at 14:07