Fill and submit html form

后端 未结 2 1987
伪装坚强ぢ
伪装坚强ぢ 2020-12-08 05:30

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

相关标签:
2条回答
  • 2020-12-08 06:11

    Aside from Mechanize and Selenium David has mentioned, it can also be achieved with Requests and BeautifulSoup.

    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.

    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')
    

    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
    
    0 讨论(0)
  • 2020-12-08 06:23

    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.

    0 讨论(0)
提交回复
热议问题