#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. Это работает с вашей стороны?