</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
编码.