Python&请求:发送带有ID的帖子?

时间:2018-01-03 21:54:59

标签: python request

我想在网页上提交表单。

该页面有多种形式:

<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触发特定表单的简单方法请求?

3 个答案:

答案 0 :(得分:0)

我会选择一些更高级的工具,例如mechanizeMechanicalSoup。后者实际上是基于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进行调查。