Прекрасный суп на Python и запросы на отправку данных формы по URL-адресу публикации

#forms #beautifulsoup #python-requests #http-post #python-requests-html

Вопрос:

Как я могу разместить данные формы по URL-адресу: http://washington.kdmid.ru/queue-en/Visitor.aspx

Когда я отправляю данные формы с полями ниже, я получаю ту же страницу в ответ вместо перенаправления на следующую страницу.

 import requests
from bs4 import BeautifulSoup

location_url = "http://washington.kdmid.ru/queue-en/visitor.aspx"
s = requests.Session()

main_page = s.get(location_url)

main_html = BeautifulSoup(main_page.text)


c_form = main_html.find_all("form")[0]
c_form_submit = c_form.attrs["action"]
data = {e.attrs.get("name"): e.attrs.get("value") for e in c_form.find_all("input")}

data["ctl00$MainContent$txtFam"] = "bsssabassra"
data["ctl00$MainContent$txtIm"] = "Akssssshassya"
data["ctl00$MainContent$txtOt"] = "a"
data["ctl00$MainContent$txtTel"] = "1122334455"
data["ctl00$MainContent$txtEmail"] = "akssbsars2@gmail.com"
data["ctl00$MainContent$DDL_Day"] = 1
data["ctl00$MainContent$DDL_Month"] = 1
data["ctl00$MainContent$TextBox_Year"] = 1993
data["ctl00$MainContent$DDL_Mr"] = "MR"
data["ctl00$MainContent$txtCode"] = captcha_txt
data["ctl00$MainContent$ButtonA"] = "Next"
import json; json.dumps(data)
submit_captcha_resp = s.post("http://washington.kdmid.ru/queue-en/visitor.aspx", 
data=json.dumps(data))
final_page = BeautifulSoup(submit_captcha_resp.text)
 

Ответ №1:

Он не будет перенаправляться, потому что это не браузер. BS не запускают сценарии JS или HTML-код. Но вы получаете ответ. Вы должны использовать один из этих:

 submit_captcha_resp = s.post("yourLongURL", json=data)
 

или

 submit_captcha_resp = s.post("yourLongURL", data=data)
 

json.dumps() используется для преобразования JSON в строку, но вам это не нужно, потому что веб-страница, на которой вы размещаете данные, использует HTML-тег, а тег формы публикует данные без преобразования их в строку. Поэтому вам не следует преобразовывать его в строку. Вы должны опубликовать его в формате JSON.

И, как сказал @dharmey: если вы получаете 404, вам следует установить пользовательский агент в качестве популярного веб-браузера. Например:

 {"User-Agent":"Mozilla/5.0"}
 

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

Ответ №2:

Я думаю, что вы, возможно, размещаете данные неправильным образом. Вы могли бы попробовать

 submit_captcha_resp = s.post("http://washington.kdmid.ru/queue-en/visitor.aspx", 
json=data)
 

Вместо data=json.dumps(data))

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

Вы могли бы просто включить

 headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
}

submit_captcha_resp = s.post("http://washington.kdmid.ru/queue-en/visitor.aspx", 
headers=headers, data=json.dumps(data))

 

для начала.

Комментарии:

1. Это работает с вашей стороны?