用python登录Dr.com思路以及代码分享


Posted in Python onJune 25, 2014

前提:isp得支持web登录的方式。

说明:每个ISP的登录页面不一样,不过我估计算法都是一样的,于是解决方案应该也是相似的,只是表单的key可能不太一样。

首先,分析登录页面。

页面head镶嵌了<script>标签,所有的提交相关的脚本都在这里。页面关键部分是两个表单:f1和f0。整个f0是看不见的,但是点击f1的提交时,会直接调用f0的提交而不是提交自己。表单的table布局就不吐槽了...

部分HTML

<form name="f1" method="post" action="" onsubmit="return ee()">
<table border="0" width="100%" cellspacing="1" cellpadding="0" height="100%" class="f1">
...
<tr>
<td height="34" width="35%" align="right">账号 Account </td><td height="34" width="64%"> <input name="DDDDD" type="text" maxlength="26" class="input-border"></td>
</tr>

<tr>
<td height="32" width="35%" align="right">密码 Password </td><td height="32" width="64%"> <input name="upass" type="password" maxlength="16" class="input-border"></td>
</tr>

<tr>
<td height="57" width="35%"> </td><td height="57" width="64%"> <input type="submit" name="0MKKey" value="" onclick="cc(0)" class="login-b">  <input type="submit" name="" value="" onclick="reset();return false;"></td>
</tr>
...
</form>

这里可以看见,点击submit的时候,调用cc(0),提交的时候调用ee()函数

部分js:

function cc(ss) {
 f0.R1.value = ss;
}

function ee() {
 if (f1.DDDDD.value == "") {
  alert("请输入您的账号 Please enter your account account number");
  return false;
 }
 f0.DDDDD.value = f1.DDDDD.value
 if (ps == 0) {
  f0.upass.value = xproc1(f1.upass.value);
 } else {
  tmpchar = pid + f1.upass.value + calg;
  f0.upass.value = calcMD5(tmpchar) + calg + pid;
  f0.R2.value = 1;
 }
 document.f0.submit();
 return false;
}

显然,点击提交后,会对f0进行一系列赋值,如果没有问题就会提交f0

f0:

<form name="f0" method="post" action=""><input type="hidden" name="DDDDD" value="0"><input type="hidden" name="upass" value="0">
<input type="hidden" name="R1" value="0"><input type="hidden" name="R2" value="0"><input type="hidden" name="para" value="00">
<input type="hidden" name="0MKKey" value="123456">
</form>

参考js里的内容,用python的dict表示f0的话有如下的伪代码:

f0={}
 f0["DDDDD"] = f1['DDDD']
 f0["upass"] = calcMD5(pid + f1['upass'] + calg) + calg + pid;
 f0["R1"] = ss
 f0["R2"] = 1
 f0["para"] = 00
 f0["0MKKey"] = 123456

其中 ss、pid、calg都是常量,f1['DDDD']、f1['upass']分别是用户输入的用户名和密码字符串

关键在于calcMD5的算法。

从函数名和函数本身来看,这个函数是MD5的一种实现。然而对js代码进行移植的过程中出现了一些问题:js和python的移位操作表现不同。

既然整个f0['upass']字段除了用户输入的密码以外,其它都是常量,完全可以用js计算出f0['upass'],python中只要保存这个字符串就行了。

检查cookies发现整个网页没有使用cookies。

登录后跳转到登出页面,分析登出页面发现,登出只需要访问某个特定的网页就行了。

于是整个思路很简单,pos登录服务器实现登录,get指定网页登出。实现代码如下:

import sys
from urllib import urlencode
from urllib2 import urlopen

username = "s10********"
upass = "6696a3***********************************"
LOGIN = "http://202.1**.***.***/"
LOGOUT = "http://202.1**.***.***/F.htm"

def post(url, data=None):
 if data:
  data = urlencode(data)
 response = urlopen(url, data)
 return response.read()

def login():
 data={}
 data["DDDDD"] = username
 data["upass"] = upass
 data["R1"] = 0
 data["R2"] = 1
 data["para"] = 00
 data["0MKKey"] = 123456
 post(LOGIN, data)
 pass

def logout():
 post(LOGOUT)

def main(argv):
 if argv[0] in ('login','in','i'):
  login()
 elif argv[0] in ('logout','out','o'):
  logout()
  pass
 pass

if __name__ == '__main__': 
 main(sys.argv[1:]);
Python 相关文章推荐
python del()函数用法
Mar 24 Python
用实例说明python的*args和**kwargs用法
Nov 01 Python
教你安装python Django(图文)
Nov 04 Python
Python 类与元类的深度挖掘 II【经验】
May 06 Python
Python 实现随机数详解及实例代码
Apr 15 Python
Python安装模块的常见问题及解决方法
Feb 05 Python
浅析PHP与Python进行数据交互
May 15 Python
解决python3运行selenium下HTMLTestRunner报错的问题
Dec 27 Python
wxpython自定义下拉列表框过程图解
Feb 14 Python
python中threading开启关闭线程操作
May 02 Python
Python高并发和多线程有什么关系
Nov 14 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
Mar 03 Python
python正则表达式re模块详解
Jun 25 #Python
Python通过websocket与js客户端通信示例分析
Jun 25 #Python
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
Jun 25 #Python
Python中文编码那些事
Jun 25 #Python
教你如何在Django 1.6中正确使用 Signal
Jun 22 #Python
python抓取网页时字符集转换问题处理方案分享
Jun 19 #Python
python在linux中输出带颜色的文字的方法
Jun 19 #Python
You might like
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
在字符串指定位置插入一段字符串的php代码
2010/02/16 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
php单文件版在线代码编辑器
2015/03/12 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
JavaScript中的Window窗口对象
2008/01/16 Javascript
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
2017/04/18 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
Python datetime时间格式化去掉前导0
2014/07/31 Python
python实现旋转和水平翻转的方法
2018/10/25 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
实习评语大全
2014/04/26 职场文书
收费员岗位职责
2015/02/14 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS
《极主夫道》真人电影正式预告 定档6月3日上映
2022/04/05 日漫
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python