填写并提交html表单 [英] Fill and submit html form

查看:57
本文介绍了填写并提交html表单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试/想要编写一个 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.

这是我编写的示例脚本,它使用 RequestsBeautifulSoup 提交用户名和密码以登录维基百科:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆