简体   繁体   中英

login to a specific website using python

I want to login the website at http://www.ppdai.com/Login.aspx I already tried some solution such as request, twill, and cookie jar, it seems none of them work. the user account list as follows:

username: zhonghao007
password: zonghao0915

Once you login succeed, you can visit another website to check your personal info at http://www.ppdai.com/account1/lend.aspx

thanks for any help
here is the requests code

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time

browser = webdriver.Firefox()# Get local session of firefox
browser.get("http://www.ppdai.com/login.aspx") # Load page
userid = browser.find_element_by_id('txtUserName')
userid.send_keys('zhonghao007')
passw = browser.find_element_by_id('txtPassword')
passw.send_keys('zonghao0915')
signin = browser.find_element_by_id('btnLogin')
signin.click()

Looking at the source code for that page you can see the form has the following structure:

<form name="form1" method="post" action="login.aspx" id="form1">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTM0MDY0ODA1OQ8WAh4LVXJsUmVmZXJyZXIFVGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTYxMjk0MzEvbG9naW4tdG8tYS1zcGVjaWZpYy13ZWJzaXRlLXVzaW5nLXB5dGhvbhYCAgEPFgIeBFRleHQF7gE8c2NyaXB0IHNyYz0iaHR0cDovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9nYS5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+dHJ5IHt2YXIgcHQgPSBfZ2F0Ll9nZXRUcmFja2VyKCJVQS0zNjM1NjY0LTEiKTtwdC5fc2V0RG9tYWluTmFtZSgnLnBwZGFpLmNvbScpO3B0Ll90cmFja1BhZ2V2aWV3KCk7fSBjYXRjaChlcnIpIHt9PC9zY3JpcHQ+ZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAQUIYnRuTG9naW7FDjuchG1Ou3OnbNrC9L5mLwpESA==" />

<input type="hidden" name="__EVENTVALIDATION" value="/wEWBQLh9ro4AqXVsrMJArWptJELAoLch4YMApCjwqsN3xZOGR6YaITqg9kNkVxXG+bnVLo=" />

<input name="txtUserName" type="text" >
<input name="txtPassword" type="password" />
<input type="image" name="btnLogin" id="btnLogin"  />
<input type="hidden" name="HiddenField1" id="HiddenField1" value="http://stackoverflow.com/questions/16129431/login-to-a-specific-website-using-python" />
        </form>

So you should be able to do a POST to http://www.ppdai.com/login.aspx with the following data

r = requests.post('http://www.ppdai.com/login.aspx', data={
    '__VIEWSTATE': '/wEPDwUKMTM0MDY0ODA1OQ8WAh4LVXJsUmVmZXJyZXIFVGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTYxMjk0MzEvbG9naW4tdG8tYS1zcGVjaWZpYy13ZWJzaXRlLXVzaW5nLXB5dGhvbhYCAgEPFgIeBFRleHQF7gE8c2NyaXB0IHNyYz0iaHR0cDovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9nYS5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+dHJ5IHt2YXIgcHQgPSBfZ2F0Ll9nZXRUcmFja2VyKCJVQS0zNjM1NjY0LTEiKTtwdC5fc2V0RG9tYWluTmFtZSgnLnBwZGFpLmNvbScpO3B0Ll90cmFja1BhZ2V2aWV3KCk7fSBjYXRjaChlcnIpIHt9PC9zY3JpcHQ+ZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAQUIYnRuTG9naW7FDjuchG1Ou3OnbNrC9L5mLwpESA==',
    '__EVENTVALIDATION': '/wEWBQLh9ro4AqXVsrMJArWptJELAoLch4YMApCjwqsN3xZOGR6YaITqg9kNkVxXG+bnVLo='
    'txtUserName': 'zhonghao007',
    'txtPassword': 'zonghao0915',
    'HiddenField1': 'http://www.somereferring-url.com'
    }
)

viewstate and eventvalidation look like they are generated with every page request, and are probably used as for some sort of CSRF validation. So you will probably need to first request the page, find the values for those fields, and then make the POST request using the freshly generated ones. You will also need to make sure you are passing the session cookie.

Alternatively you can use Selenium webdriver to directly drive a real browser. That means it will definitely work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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