我想在网页上提交表单。
该页面有多种形式:
<form method="post" action="https://mywebsite.com/pageA" id="order" class="order ajaxForm">
<input type="text" class="decimal" name="value" id="fieldA" value="0" />
</label>
</form>
<form method="post" action="https://mywebsite.com/pageB" id="previousorder" class="order ajaxForm">
<input type="text" class="decimal" name="value" id="fieldB" value="0" />
</label>
</form>
是否有一种使用python&amp; amp触发特定表单的简单方法请求?
答案 0 :(得分:0)
我会选择一些更高级的工具,例如mechanize
或MechanicalSoup
。后者实际上是基于requests
内部的(我假设你的意思是requests
包“请求”)。这两个工具都允许“选择所需的表单”,然后提交它指定所需的参数。
例如,使用order
提交MechanicalSoup
表单看起来像这样:
import mechanicalsoup
browser = mechanicalsoup.StatefulBrowser()
browser.open("https://yourwebsite.com")
# Fill-in the order form
browser.select_form('#order')
browser["value"] = "100"
browser.submit_selected()
答案 1 :(得分:0)
尝试这样的事情:(需要进行一些修改,但它会接近您想要的登录表单示例):
安装lxml
import requests
from lxml import html
payload = {
"username": "<USER NAME>",
"password": "<PASSWORD>",
"csrfmiddlewaretoken": "<CSRF_TOKEN>"
}
sessionReq = requests.session()
login_url = "https://example.be/account/login.php"
result = sessionReq.get(login_url)
tree = html.fromstring(result.text)
authenticity_token = list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0]
result = sessionReq.post(login_url,data = payload, headers = dict(referer = login_url)
url = 'https://bitbucket.org/dashboard/overview'
我希望这可以帮助你:)
答案 2 :(得分:0)
发布表单时,您必须查看DevTools网络选项卡。
每个表单都有不同的请求url和post参数。通常,您需要对requests
执行的操作是这样的:
req = requests.post('https://mywebsite.com/pageB',
data = {'fieldB':'value_you_want_to_submit'})
但最好先用DevTools进行调查。