Forms Python和请求在post url上提交表单数据
如何在url上发布表单数据: 当我提交带有以下字段的表单数据时,我得到的响应是相同的页面,而不是重定向到下一页Forms Python和请求在post url上提交表单数据,forms,beautifulsoup,python-requests,http-post,python-requests-html,Forms,Beautifulsoup,Python Requests,Http Post,Python Requests Html,如何在url上发布表单数据: 当我提交带有以下字段的表单数据时,我得到的响应是相同的页面,而不是重定向到下一页 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 = Be
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)
我想你可能发布数据的方式不对。你可以试试
submit_captcha_resp = s.post("http://washington.kdmid.ru/queue-en/visitor.aspx",
json=data)
而不是data=json.dumps(data))
如果这不起作用/站点需要实际的表单数据,请尝试传入一些标题
,因为服务器可能需要这些标题才能正确接收请求
你可以包括
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))
它不会重定向,因为它不是浏览器。BS不运行JS脚本或HTML代码。但是你得到了回应。 您应该使用以下选项之一:
submit\u captcha\u resp=s.post(“yourLongURL”,json=data)
或
submit\u captcha\u resp=s.post(“yourLongURL”,data=data)
json.dumps()用于将json转换为字符串,但您不需要这样做,因为发布数据的网页使用HTML标记,而表单标记发布数据,而不将其转换为字符串。所以你不应该把它转换成字符串。您应该以JSON格式发布它
正如@dharmey所说:如果你有一个404,你应该设置一个用户代理作为一个流行的web浏览器。例如:
{“用户代理”:“Mozilla/5.0”}
我想现在你有更大的问题,比如通过验证码。它在你这边运行吗?