如何在Python中以编程方式登录网站



我已经在互联网上搜索过了,看了很多例子,并尝试了我找到的每一个,但是没有一个适合我,所以请不要认为这是一个重复-我需要帮助我的具体情况。

我正在尝试使用Python登录到一个网站(在这种情况下,我正在尝试使用v2.7,但我不反对使用最新版本,只是我能够找到2.7上最多的信息)。

我需要填写一个简短的表格,只有用户名和密码。我需要填写和登录的网页形式如下(我知道有点乱):

<form method="post" action="login.aspx?ReturnUrl=..%2fwebclient%2fstorepages%2fviewshifts.aspx" id="Form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTU4MTgwOTM1NWRkBffWXYjjifsi875vSMg9OVkhxOQYYstGTNcN9/PFb+M=" />
</div>
<div class="aspNetHidden">
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAAVrmuRkG3j6RStt7rezNSLKVK7BrRAtEiqu9nGFEI+jB3Y2+Mc6SrnAqio3oCKbxYY85pbWlDO2hADfoPXD/5td+Ot37oCEEXP3EjBFcbJhKJGott7i4PNQkjYd3HFozLgRvbhbY2j+lPBkCGQJXOEe" />
</div>
            <div><span></span>
                <table style="BORDER-COLLAPSE: collapse" borderColor="#000000" cellSpacing="0" cellPadding="0"
                    width="600" align="center" border="1">
                    <tr>
                        <td>
                            <table cellSpacing="0" cellPadding="0" width="100%" align="center" border="0">
                                <tr>
                                    <td width="76%"><span id="centercontentTitle"></span>
                                        <H1 align="center"><br>
                                            <span>
                                                <IMG height="52" src="../images/logo-GMR.jpg" width="260"></span><span><br>
                                            </span></H1>
                                        <div id="centercontentbody">
                                            <div align="center">
                                                <TABLE width="350">
                                                    <TR>
                                                        <TD class="style7">Username:</TD>
                                                        <TD>
                                                            <div align="right"><input name="txtUsername" type="text" id="txtUsername" style="width:250px;" /></div>
                                                        </TD>
                                                    </TR>
                                                    <TR>
                                                        <TD class="style7">Password:</TD>
                                                        <TD>
                                                            <div align="right"><input name="txtPassword" type="password" id="txtPassword" style="width:250px;" /></div>
                                                        </TD>
                                                    </TR>
                                                    <TR>
                                                        <TD></TD>
                                                        <TD align="right"><input type="submit" name="btnSubmit" value="Submit" id="btnSubmit" /><input type="submit" name="btnCancel" value="Cancel" id="btnCancel" /></TD>
                                                    </TR>
                                                    <TR>
                                                        <TD colspan="2" align="center"></TD>
                                                    </TR>
                                                </TABLE>
                                            </div>
                                        </div>
                                    </td>
                                    <td>
                                        <div align="center" style='height:250px'></div>
                                    </td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                </table>
                <br>
                <br>
                <p>&nbsp;</p>
        </form>

从网上搜索,我发现最好的Python代码填写这个表格,并登录到网站如下:

注意:这不是我的代码,我从这个问题/例子中得到的,很多人都说他们发现它工作得很好。

import cookielib
import urllib
import urllib2

# Store the cookies and create an opener that will hold them
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
# Add our headers
opener.addheaders = [('User-agent', 'LoginTesting')]
# Install our opener (note that this changes the global opener to the one
# we just made, but you can also just call opener.open() if you want)
urllib2.install_opener(opener)
# The action/ target from the form
authentication_url = '<URL I am trying to log into>'
# Input parameters we are going to send
payload = {
  '__EVENTVALIDATION': '/wEdAAVrmuRkG3j6RStt7rezNSLKVK7BrRAtEiqu9nGFEI+jB3Y2+Mc6SrnAqio3oCKbxYY85pbWlDO2hADfoPXD/5td+Ot37oCEEXP3EjBFcbJhKJGott7i4PNQkjYd3HFozLgRvbhbY2j+lPBkCGQJXOEe"',
  'txtUsername': '<USERNAME>',
  'txtPassword': '<PASSWORD>',
  }
# Use urllib to encode the payload
data = urllib.urlencode(payload)
# Build our Request object (supplying 'data' makes it a POST)
req = urllib2.Request(authentication_url, data)
# Make the request and read the response
resp = urllib2.urlopen(req)
contents = resp.read()

不幸的是,这对我不起作用,我不知道为什么。如果有人能请你请你看一下代码,告诉我如何改进它,使它的工作,因为它应该。这将是非常感激!

提前感谢我得到的所有帮助:)

__EVENTVALIDATION可能不是静态的,您需要在python中加载登录页面,获取__EVENTVALIDATION字段,然后进行登录。

应该这样做:

import requests
from bs4 import BeautifulSoup
s = requests.session()
def get_eventvalidation():
    r = s.get("http://url.to.login.page")
    bs = BeautifulSoup(r.text)
    return bs.find("input", {"name":"__EVENTVALIDATION"}).attrs['value']
authentication_url = '<URL I am trying to log into>'
payload = {
  '__EVENTVALIDATION': get_eventvalidation(),
  'txtUsername': '<USERNAME>',
  'txtPassword': '<PASSWORD>',
  }
login = s.post(authentication_url, data=payload)
print login.text

您需要请求模块和beautifulsoup4。或者你可以把它重写为不使用库。

编辑:您可能需要__VIEWSTATE作为POST值

相关内容

  • 没有找到相关文章

最新更新