首页 > Python 爬虫模拟登陆

Python 爬虫模拟登陆

</head>
    <body>
        <main>
            <section>
                <form class="centerForm" action="/opmt-emp/j_security_check" method="post" onsubmit="javaScript: setUserName();">
                    <div class="login">
                        <h3> <span class="logo" ></span> </h3>
                        <div class="lintro">
                            <ul class="l">
                                <li><input class="tinput" name="j_username" id="j_username" type="text" value="请输入UM用户名" /><span class="userName-icon"></span></li>
                                <li>
                                    <input class="tinput" name="j_password" id="j_password" type="password" style="display:none;" value="" />
                                    <input class="tinput" name="j_password_temp" id="j_password_temp" type="text" value="请输入UM密码" />
                                    <span class="password-icon"></span>
                                </li>
                            </ul>
                            <div class="lbtn"> <button>登录</button> </div>
                        </div>
                        

上面是initial 页面
我想模拟登陆,但不成功

# coding:utf-8
import sys
import urllib2
import urllib
import cookielib

reload(sys)
sys.setdefaultencoding('utf-8')

cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
postdata=urllib.urlencode({'j_username':"XXXX",'j_password_temp':"XXXX"})
req=urllib2.Request(url='http://emp.paic.com.cn/opmt-emp/',data=postdata)
req.add_header('User-Agent','Mozilla/5.0,(Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0')
#req.Request(url='http://emp.paic.com.cn/opmt-emp/',data=postdata)
result = opener.open(req)
print result.read()

应该是输入用户名和密码啊!为什么没有登陆呢?


建议抓包分析,推荐使用fiddler

抓包后,主要看post里面的内容,有时网站出来提交用户名和密码外,还有一些其他一些看似无关的内容,其实是用来检验你是不是从这个网站登陆过去,而且根据我爬去学校的教务网的经验,这些内容极有可能是通过一些函数添加进去的。所以你也需要留意一下这个网站js的一些内容,或者从找到的包里直接copy过去试试。

楼上的说的观点都对,另外就是题主你给出了信息不够详细,我只能给一个思路你参考一下,不能给出具体方案。

希望能帮到你。


打开你的浏览器控制台,看看你点击登录时候POST的这个请求当中Form Data的内容,因为这个网站发起登录请求的时候,除了username, password,有可能还需要一些其他的字段内容


j_password字段是不是必须的?抓包验证了没?
还有,提交的路径不应该是 /opmt-emp/j_security_check 么? 你的是/opmt-emp


提供一下 setUserName 这个函数的定义.
如果可以的话, 提供一下你这段HTML所在的URL地址.

另外,你说的登陆不成功,具体一点,比如你最后 print 出来的内容是什么?
是密码错误? 还是啥也没有?


更新: 2016-01-08 12:19
根据你在评论中提供的HTML/JS代码,将你的脚本更新如下
但因为你提供的网站, 我这里打不开, 所以测试不了正确性, 所以如果有问题,请继续反馈给我.


更新: 2016-01-08 15:22
根据在QQ上反馈的相关内容, 更新脚本如下:

# coding:utf-8
import sys
import urllib2
import urllib
import cookielib


reload(sys)
sys.setdefaultencoding('utf-8')


#在此处设置用户名/密码
username = "XXX"
password = "xyzxv"



def make_cookie(name, value, domain, path='/'):
    return cookielib.Cookie(version=0,
      name=name,
      value=value,
      port=None,
      port_specified=False,
      domain=domain,
      domain_specified=True,
      domain_initial_dot=False,
      path=path,
      path_specified=True,
      secure=False,
      expires=None,
      discard=False,
      comment=None,
      comment_url=None,
      rest=None,
      rfc2109=False)


#设置Cookie容器 和 User-Agent
__cookie = cookielib.CookieJar()
__req = urllib2.build_opener(urllib2.HTTPCookieProcessor(__cookie))
__req.addheaders = [
  ('Accept', 'application/javascript, */*;q=0.8'),
  ('User-Agent', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)')
]
urllib2.install_opener(__req)



#先请求首页, 得到Cookie(产生Session会话)
request = urllib2.Request('http://emp.paic.com.cn/opmt-emp/')
urllib2.urlopen(request).read()



#用户名转换为大写
username = username.upper()

#构造要提交的数据
postdata = {'j_username': username, 'j_password': password, 'j_password_temp': '请输入UM密码'}



req = urllib2.Request('http://emp.paic.com.cn/opmt-emp/j_security_check', urllib.urlencode(postdata))


#增加 Cookie(该Cookie由网页中的JS写入的)
__cookie.set_cookie(make_cookie('E2E.loginUserName', username, 'emp.paic.com.cn'))

#增加 Referer
req.add_header('Referer', 'http://emp.paic.com.cn/opmt-emp/')


#发出请求
result = urllib2.urlopen(req)

#输出结果
print result.read()

文件保存为UTF-8编码.

【热门文章】
【热门文章】