简体   繁体   English

填写并提交HTML表单

[英]Fill and submit html form

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 我正在尝试/想要编写一个Python脚本(2.7),该脚本将转到网站上的表单(名称为"form1" ),并用单词hello填充该表单中的第一个输入字段,第二个输入字段用单词Ronald ,和第三个字段ronaldG54@gmail.com

Can anyone help me code or give me any tips or pointers on how to do this ? 任何人都可以帮助我编写代码或提供有关如何执行此操作的提示或指示吗?

Aside from Mechanize and Selenium David has mentioned, it can also be achieved with Requests and BeautifulSoup . 除了Mechanize和Selenium David提到的之外,还可以通过RequestsBeautifulSoup实现。

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解析响应html以了解要发送到服务器的参数。

Here is an example script I wrote that uses both Requests and BeautifulSoup to submit username and password to login to wikipedia: 这是我编写的示例脚本,该脚本同时使用RequestsBeautifulSoup来提交用户名和密码以登录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')

Update: 更新:

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

Take a look at Mechanize and Selenium . 看看机械化 Both are excellent pieces of software that would allow you to automate filling and submitting a form, among other browser tasks. 两者都是出色的软件,可让您自动执行填写和提交表单以及其他浏览器任务。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM