Forms Python和请求在post 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

如何在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 = 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”}

我想现在你有更大的问题,比如通过验证码。

它在你这边运行吗?