填写并提交html表单 [英] Fill and submit html form
问题描述
我正在尝试/想要编写一个 Python 脚本 (2.7),该脚本转到网站上的表单(名称为 "form1"
)并填写所述表单中的第一个输入字段使用单词 hello
,第二个输入字段包含单词 Ronald
,第三个字段包含 ronaldG54@gmail.com
I am trying / wanting to write a Python script (2.7) that goes to a form on a website (with the name "form1"
) and fills in the first input-field in said form with the word hello
, the second input-field with the word Ronald
, and the third field with ronaldG54@gmail.com
任何人都可以帮我编写代码或给我任何有关如何执行此操作的提示或指示吗?
Can anyone help me code or give me any tips or pointers on how to do this ?
推荐答案
除了 Mechanize 和 Selenium David 提到的,也可以通过 请求
和 BeautifulSoup
.
Aside from Mechanize and Selenium David has mentioned, it can also be achieved with Requests
and BeautifulSoup
.
为了更清楚,使用 Requests
向服务器发送请求和从服务器检索响应,并使用 BeautifulSoup
解析响应 html 以了解要发送给服务器的参数服务器.
To be more clear, use Requests
to send request to and retrieve responses from server, and use BeautifulSoup
to parse the response html to know what parameters to send to the server.
这是我编写的示例脚本,它使用 Requests
和 BeautifulSoup
提交用户名和密码以登录维基百科:
Here is an example script I wrote that uses both Requests
and BeautifulSoup
to submit username and password to login to wikipedia:
import requests
from bs4 import BeautifulSoup as bs
def get_login_token(raw_resp):
soup = bs(raw_resp.text, 'lxml')
token = [n['value'] for n in soup.find_all('input')
if n['name'] == 'wpLoginToken']
return token[0]
payload = {
'wpName': 'my_username',
'wpPassword': 'my_password',
'wpLoginAttempt': 'Log in',
#'wpLoginToken': '',
}
with requests.session() as s:
resp = s.get('http://en.wikipedia.org/w/index.php?title=Special:UserLogin')
payload['wpLoginToken'] = get_login_token(resp)
response_post = s.post('http://en.wikipedia.org/w/index.php?title=Special:UserLogin&action=submitlogin&type=login',
data=payload)
response = s.get('http://en.wikipedia.org/wiki/Special:Watchlist')
<小时>
更新:
对于您的具体情况,以下是工作代码:
For your specific case, here is the working code:
import requests
from bs4 import BeautifulSoup as bs
def get_session_id(raw_resp):
soup = bs(raw_resp.text, 'lxml')
token = soup.find_all('input', {'name':'survey_session_id'})[0]['value']
return token
payload = {
'f213054909': 'o213118718', # 21st checkbox
'f213054910': 'Ronald', # first input-field
'f213054911': 'ronaldG54@gmail.com',
}
url = r'https://app.e2ma.net/app2/survey/39047/213008231/f2e46b57c8/?v=a'
with requests.session() as s:
resp = s.get(url)
payload['survey_session_id'] = get_session_id(resp)
response_post = s.post(url, data=payload)
print response_post.text
这篇关于填写并提交html表单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!