python模拟自动登录网站(urllib2)
不登录打开网页:
import urllib2
request = urllib2.Request('http://www.baidu.com')
response = urllib2.urlopen(request).read()
print response
保存网页图片(https://www.baidu.com/img/bd_logo1.png):
picurl = 'https://www.baidu.com/img/bd_logo1.png' #定义图片的url地址
req = urllib2.Request(picurl)
data = urllib2.urlopen(req).read() file=open('d:\\zaa.jpg','wb') #将图片保存为名为zaa.jpg的图片
file.write(data)
file.flush()
file.close()
模拟自动登录zabbix:
import urllib2,cookielib,urllib
#定义登录地址
login_url = 'http://10.16.2.4/zabbix/index.php'
#定义登录所需要用的信息,如用户名、密码等,详见下图,使用urllib进行编码
login_data = urllib.urlencode({
"name": 'admin',
"password": 'password',
"autologin": 1,
"enter": "Sign in"}) #设置一个cookie处理器,它负责从服务器下载cookie到本地,并且在发送请求时带上本地的cookie
cj = cookielib.CookieJar() #获取Cookiejar对象(存在本机的cookie消息)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) #自定义opener,并将opener跟CookieJar对象绑定
urllib2.install_opener(opener) #安装opener,此后调用urlopen()时都会使用安装过的opener对象
response=opener.open(login_url,login_data).read() #访问登录页,自动带着cookie信息
print response #返回登陆后的页面源代码
zabbix登录页面内容:

有的页面登录时会post到其他页面,查看登录页面的form中的action地址,可能需要构造header头信息:
#发送头信息
headers = {
'Referer':'http://10.16.2.4/zabbix/index.php',
'Host':'10.16.2.4', #可以不要,一般两项就可以
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'
}
#定义登录地址
login_url = 'http://10.16.2.4/zabbix/index.php'
#定义登录所需要用的信息,如用户名、密码等,使用urllib进行编码
login_data = urllib.urlencode({
"name": 'admin',
"password": 'password',
"autologin": 1,
"enter": "Sign in"}) #设置一个cookie处理器,它负责从服务器下载cookie到本地,并且在发送请求时带上本地的cookie
cj = cookielib.CookieJar() #获取Cookiejar对象(存在本机的cookie消息)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) #自定义opener,并将opener跟CookieJar对象绑定
urllib2.install_opener(opener) #安装opener,此后调用urlopen()时都会使用安装过的opener对象
urllib2.urlopen(login_url)#打开登录主页面(他的目的是从页面下载cookie,这样我们在再送post数据时就有cookie了,否则发送不成功)
#通过urllib2提供的request方法来向指定Url发送我们构造的数据,并完成登录过程
req=urllib2.Request(post_url,login_data,headers) #post_url需要在请求过程中自己得出
response=urllib2.urlopen(req)
print response.read()
response.close()
在ie中手动登录后,可以看到相应的header头信息,如下:

模拟登录piao.x.com(先使用chrome抓包,输入一个错误的账号密码):
import urllib,urllib2,cookielib username='name'
password='pass'
loginurl='http://piao.x.com/loginHandler.ashx' #此为在登录过程中post到的页面 cj = cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) headers={
'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.8.1000 Chrome/30.0.1599.101 Safari/537.36',
'Referer':'http://piao.x.com/login/login',
'Content-Type':'text/html'
}
for key in headers: #增加多个header
opener.addheaders.append((key,headers[key])) data = urllib.urlencode({"username":username,"password":password}) #使用google可以看到此处的用户密码为明文发送,格式为username=username&password=password,如下图所示。
opener.open(loginurl,data)
print opener.open('http://piao.x.com/#dGlja2V0').read() #登录成功后可以打开其他页面。
Form Data部分为需要Post到Server的参数,piao登录需要Post的参数是2个,zabbix登录需要Post的参数是4个 。
piao login:

zabbix login:

如上图所示,查看Respons Headers部分,可以看到其中的Set-Cookie,该cookie可以在后面的站内访问使用,使用urllib2也可以看到该部分内容:
import cookielib,urllib,urllib2
zabbix_url="http://10.16.2.4/zabbix/index.php"
zabbix_header = {"Content-Type":"application/json"}
zabbix_user = "admin"
zabbix_pass = "password" cj = cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
data = urllib.urlencode({"name":zabbix_user,"password":zabbix_pass,'form_refresh':1,'enter':'Sign in'})
response = opener.open(zabbix_url,data)
print response.headers #打印Server 的response header头部分内容:
返回:
Date: Wed, 25 May 2016 08:07:17 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
X-Powered-By: PHP/5.4.16
Set-Cookie: zbx_sessionid=bbc97766e8c132a56f2d016a6963219a
Set-Cookie: PHPSESSID=v8sno86fnc19iqgltipae0l2d2; path=/zabbix/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=v8sno86fnc19iqgltipae0l2d2; path=/zabbix/
Set-Cookie: PHPSESSID=v8sno86fnc19iqgltipae0l2d2; path=/zabbix/
Set-Cookie: PHPSESSID=v8sno86fnc19iqgltipae0l2d2; path=/zabbix/
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
在urllib2中不再使用用户名密码,直接使用上面得到的cookie访问站内页面:
import cookielib,urllib,urllib2
zabbix_url="http://10.16.2.4/zabbix/index.php"
zabbix_header = {"Content-Type":"application/json"} cj = cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) zabbix_header = {'cookie':'zbx_sessionid=bbc97766e8c132a56f2d016a6963219a'} #使用前面得到的cookie
for key in zabbix_header: #增加多个header,把cookie放到header中,访问server时使用该cookie
opener.addheaders.append((key,zabbix_header[key])) print opener.open('http://10.16.2.4/zabbix/tr_status.php?fullscreen=0&groupid=0&hostid=0&show_triggers=1&ack_status=1&show_events=1&show_severity=0&txt_select=&application=&inventory%5B0%5D%5Bfield%5D=type&inventory%5B0%5D%5Bvalue%5D=&filter_set=Filter').read() #该页面可以直接访问,不再需要使用用户名密码等信息。
参考:http://www.cnblogs.com/sysu-blackbear/p/3629770.html 保存cookie到本地文件
http://www.2cto.com/kf/201401/275152.html 详细,带有http具体访问过程
http://www.jb51.net/article/63759.htm 简明
http://www.blogjava.net/hongqiang/archive/2012/08/01/384552.html
python模拟自动登录网站(urllib2)的更多相关文章
- java浏览器控件jxbrowser(简单demo模拟自动登录与点击)
写在前面: 老大让我写个脚本自动给他写dms有一段时间了,说实话当时不知道老大指的这个脚本是什么?毕竟是做web的,难道是写个数据库sql语句脚本吗?也就放在了一边.巧了,最近一个朋友说他之前写了个程 ...
- 利用Python模拟GitHub登录
最近学习了Fiddler抓包工具的简单使用,通过抓包,我们可以抓取到HTTP请求,并对其进行分析.现在我准备尝试着结合Python来模拟GitHub登录. Fiddler抓包分析 首先,我们想要模拟一 ...
- QQ模拟自动登录实现
QQ模拟自动登录实现 本篇文章主要介绍"QQ模拟自动登录实现(带验证码)",主要涉及到java 实现QQ自动登录(带验证码)方面的内容,对于java 实现QQ自动登录(带验证码)感 ...
- Java 扫描微信公众号二维码,关注并自动登录网站
https://blog.csdn.net/qq_42851002/article/details/81327770 场景:用户扫描微信公众号的二维码,关注后自动登录网站,若已关注则直接登录. 逻辑: ...
- 吴裕雄--天生自然PYTHON学习笔记:python自动登录网站
打开 www. 5 l eta . com 网站,如果己经通过某用户名进行了登录,那么先退出登录 . 登录该网站 的步骤一般如下 : ( 1 )单击右上角的“登录”按钮. ( 2 )先输入账号. ( ...
- python网络爬虫之使用scrapy自动登录网站
前面曾经介绍过requests实现自动登录的方法.这里介绍下使用scrapy如何实现自动登录.还是以csdn网站为例. Scrapy使用FormRequest来登录并递交数据给服务器.只是带有额外的f ...
- 定向爬虫 - Python模拟新浪微博登录
当我们试图从新浪微博抓取数据时,我们会发现网页上提示未登录,无法查看其他用户的信息. 模拟登录是定向爬虫制作中一个必须克服的问题,只有这样才能爬取到更多的内容. 实现微博登录的方法有很多,一般我们在模 ...
- Python模拟校园网登录
最近忙着实验室的项目,学习的时间相对较少.前一段时间刚开始接触python时,依葫芦画瓢照着写了一个爬虫,爬取了某个网站的图片.当看到一张张图片自动出现在电脑屏幕上时,有些小小成就感.我想大多数人开始 ...
- python 模拟豆瓣登录(豆瓣6.0)
最近在学习python爬虫,看到网上有很多关于模拟豆瓣登录的例子,随意找了一个试了下,发现不能运行,对比了一下代码和豆瓣网站,发现原来是豆瓣网站做了修改,增加了反爬措施. 首先看下要模拟登录的网站: ...
随机推荐
- DROP TABLE 恢复【一】
当DROP TABLE指令敲下的时候,你很爽,你有考虑过后果么?如果该表真的没用,你DROP到无所谓,如果还有用的,这时你肯定吓惨了吧,如果你有备份,那么恭喜你,逃过一劫,如果没有备份呢?这时就该绝望 ...
- C#读取注册表中二进制类型的值(REG_BINARY)
如需要读取注册表中某个键的值, 例如读取DriverDesc对应的值,一般情况下为String类型,读取代码如下: RegistryKey driverKey = Registry.LocalMach ...
- WPF中路由事件的传播
路由事件(RoutedEvent)是WPF中新增的事件,使用起来与传统的事件差别不大, 但传播方式是完全不同的. 路由事件的传播方式 通过RoutingStrategy来定义传播的方式 public ...
- C++ 各种继承
博客园首页博问闪存新随笔联系订阅 管理随笔- 文章- 评论- C++继承:公有,私有,保护 公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. ...
- (转)mybatis热加载(依赖mybatis-plus插件)的实现
最近在使用mybatis,由于是刚刚开始用,用的并不顺手,目前是感觉有2个地方非常的不好用: 1.mybatis调试不方便 由于dao层只有接口,实现只是一个map的xml文件,想加断点都没有地方加, ...
- SQL Server T—SQL 基本编程
一 定义变量 declare @变量名 数据类型 例:declare @a int -- 变量名前必须有 @ 二 赋值 set @变量名 = 值 sele ...
- bootstrap-datepicker 开始时间-结束时间 thinkphp
<!DOCTYPE html> <head> <title>开始-结束时间测试</title> </head> <body> & ...
- [javaSE] 看知乎学习反射
简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息. 知乎:学习java应该如何理解反射? 余晖: 反射提供了一种运 ...
- [转载] MySQL的四种事务隔离级别
本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...
- 用MSBuild和Jenkins搭建持续集成环境(1)[收集]
你或其他人刚刚写完了一段代码,提交到项目的版本仓库里面.但等一下,如果新提交的代码把构建搞坏了怎么办?万一出现编译错误,或者有的测试失败了,或者代码不符合质量标准所要求的底限,你该怎么办? 最不靠谱的 ...