知道如何快速在命令行或者python脚本中实例化一个浏览器通常是非常有用的。

每次我需要做任何关于web的自动任务时,我都使用这段python代码去模拟一个浏览器。

import mechanize

import cookielib

# Browser

br = mechanize.Browser()

# Cookie Jar

cj = cookielib.LWPCookieJar()

br.set_cookiejar(cj)

# Browser options

br.set_handle_equiv(True)

br.set_handle_gzip(True)

br.set_handle_redirect(True)

br.set_handle_referer(True)

br.set_handle_robots(False)

# Follows refresh 0 but not hangs on refresh > 0

br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

# Want debugging messages?

#br.set_debug_http(True)

#br.set_debug_redirects(True)

#br.set_debug_responses(True)

# User-Agent (this is cheating, ok?)

br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

现在你得到了一个浏览器的示例,br对象。使用这个对象,便可以打开一个页面,使用类似如下的代码:

# Open some site, let's pick a random one, the first that pops in mind:

r = br.open('http://google.com')

html = r.read()

# Show the source

print html

# or

print br.response().read()

# Show the html title

print br.title()

# Show the response headers

print r.info()

# or

print br.response().info()

# Show the available forms

for f in br.forms():

print f

# Select the first (index zero) form

br.select_form(nr=0)

# Let's search

br.form['q']='weekend codes'

br.submit()

print br.response().read()

# Looking at some results in link format

for l in br.links(url_regex='stockrt'):

print l

如果你访问的网站需要验证(http basic auth),那么:

# If the protected site didn't receive the authentication data you would

# end up with a 410 error in your face

br.add_password('http://safe-site.domain', 'username', 'password')

br.open('http://safe-site.domain')

由于之前使用了Cookie Jar,你不需要管理网站的登录session。也就是不需要管理需要POST一个用户名和密码的情况。

通常这种情况,网站会请求你的浏览器去存储一个session cookie除非你重复登陆,

而导致你的cookie中含有这个字段。所有这些事情,存储和重发这个session cookie已经被Cookie Jar搞定了,爽吧。

同时,你可以管理你的浏览器历史:

# Testing presence of link (if the link is not found you would have to

# handle a LinkNotFoundError exception)

br.find_link(text='Weekend codes')

# Actually clicking the link

req = br.click_link(text='Weekend codes')

br.open(req)

print br.response().read()

print br.geturl()

# Back

br.back()

print br.response().read()

print br.geturl()

下载一个文件:

# Download

f = br.retrieve('http://www.google.com.br/intl/pt-BR_br/images/logo.gif')[0]

print f

fh = open(f)

为http设置代理

# Proxy and user/password

br.set_proxies({"http": "joe:password@myproxy.example.com:3128"})

# Proxy

br.set_proxies({"http": "myproxy.example.com:3128"})

# Proxy password

br.add_proxy_password("joe", "password")

但是,如果你只想要打开网页,而不需要之前所有神奇的功能,那你可以:

# Simple open?

import urllib2

print urllib2.urlopen('http://stockrt.github.com').read()

# With password?

import urllib

opener = urllib.FancyURLopener()

print opener.open('http://user:password@stockrt.github.com').read()

你可以通过 mechanize官方网站 , mechanize文档 和ClientForm的文档 了解更多。

原文来自:http://reyoung.me/index.php/2012/08/08/%E7%BF%BB%E8%AF%91%E4%BD%BF%E7%94%A8python%E6%A8%A1%E4%BB%BF%E6%B5%8F%E8%A7%88%E5%99%A8%E8%A1%8C%E4%B8%BA/

——————————————————————————————

最后来聊下通过代码访问页面时的一个很重要的概念和技术:cookie

我们都知道HTTP是无连接的状态协议,但是客户端和服务器端需要保持一些相互信息,比如cookie,有了cookie,服务器才能知道刚才是这个用户登录了网站,才会给予客户端访问一些页面的权限。

比如用浏览器登录新浪微博,必须先登录,登陆成功后,打开其他的网页才能够访问。用程序登录新浪微博或其他验证网站,关键点也在于需要保存cookie,之后附带cookie再来访问网站,才能够达到效果。

这里就需要Python的cookielib和urllib2等的配合,将cookielib绑定到urllib2在一起,就能够在请求网页的时候附带cookie。

具体做法,首先第一步,用firefox的httpfox插件,在浏览器衷开始浏览新浪微博首页,然后登陆,从httpfox的记录中,查看每一步发送了那些数据请求了那个URL;之后再python里面,模拟这个过程,用urllib2.urlopen发送用户名密码到登陆页面,获取登陆后的cookie,之后访问其他页面,获取微博数据。

cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。例如可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送。coiokielib模块用到的对象主要有下面几个:CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。

urllib模块和urllib模块类似,用来打开URL并从中获取数据。与urllib模块不同的是,urllib模块不仅可以使用urlopen()函数还可以自定义Opener来访问网页。同时要注意:urlretrieve()函数是urllib模块中的,urllib2模块中不存在该函数。但是使用urllib2模块时一般都离不开urllib模块,因为POST的数据需要使用urllib.urlencode()函数来编码。

cookielib模块一般与urllib2模块配合使用,主要用在urllib2.build_oper()函数中作为urllib2.HTTPCookieProcessor()的参数。使用方法如下面登录人人网的代码:

#! /usr/bin/env python

#coding=utf-8

import urllib2

import urllib

import cookielib

data={"email":"用户名","password":"密码"} #登陆用户名和密码

post_data=urllib.urlencode(data)

cj=cookielib.CookieJar()

opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

headers ={"User-agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"}

req=urllib2.Request("http://www.renren.com/PLogin.do",post_data,headers)

content=opener.open(req)

print content.read().decode("utf-8").encode("gbk")

具体请参考:

http://www.crazyant.net/796.html  Python使用cookielib和urllib2模拟登陆新浪微博并抓取数据

http://my.oschina.net/duhaizhang/blog/69342  urllib2模块

https://docs.python.org/2/library/cookielib.html  cookielib — Cookie handling for HTTP clients

本文标题: 在Python中使用mechanize模块模拟浏览器功能

本文地址: http://www.cppcns.com/jiaoben/python/124133.html

python模拟浏览器模块_在Python中使用mechanize模块模拟浏览器功能相关推荐

  1. java根据散点图模拟出直线_借助Excel中XY散点图来模拟实现纵向折线图的方法

    Excel中的折线图通常是在水平方向上展示数据图线,如果希望在纵向上也能展现折线图,可以借助XY散点图来模拟实现.本文就图文介绍了借助Excel中XY散点图来模拟实现纵向折线图的方法. 具体方法可参考 ...

  2. python图片批量处理器_用python给图片批量打水印

    之前写菲律宾游记,想给自己的照片批量打上水印,首先想到的就是用Python实现给图片加文字,然后写个循环. 做过图像识别的,应该知道OpenCV,其中cv2.putText()函数,就可以实现在图片 ...

  3. modprobe:用于向内核中加载模块或者从内核中移除模块。

    modprobe:用于向内核中加载模块或者从内核中移除模块. modprobe br_netfilter 加载模块 modprobe -r br_netfilter 移除 1.查看系统中所有modul ...

  4. modprobe命令用于智能地向内核中加载模块或者从内核中移除模块

    modprobe命令用于智能地向内核中加载模块或者从内核中移除模块. modprobe可载入指定的个别模块,或是载入一组相依的模块.modprobe会根据depmod所产生的相依关系,决定要载入哪些模 ...

  5. python getattr调用自己模块_在Python中通过getattr获取对象引用的方法

    getattr函数 (1)使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用. >>> li = ["Larry", "Curly ...

  6. python中的utils模块_使用Python的package机制如何简化utils包设计详解

    package 机制 package是模块的集合,每一个Package的根目录下面都应当有一个__init__.py 文件.当解释器发现目录下有这个文件时,他就会认为这是一个Package,而不是一个 ...

  7. python如何查看有什么模块_在python中如何查看模块功能

    在python中查看模块功能的方法:1.在python命令行输入help()函数进入help帮助文档界面:2.键入[modules]列出当前所有安装的模块:3.键入相应的模块名称即可得到该模块的功能信 ...

  8. python中select模块_基于python select.select模块通信的实例讲解 如何用python写个串口通信的程序...

    python socket怎么利用select实现双工通信 方法: Before : 0000000000000000000000000000000000000000 After pack: 0100 ...

  9. python中tkinter模块_使用Python中的tkinter模块作图的方法

    python简述: Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程.Python[1 ...

最新文章

  1. php调用以太坊geth API说明
  2. 启明云端分享|PX30核心板 怎么烧录
  3. jpa关联映射(一)
  4. 自动让钱生钱方法100%安全稳定
  5. 函数参数传递、数组指针、二级指针、左值、引用
  6. 恢复Cisco路由器口令
  7. android tabhost 生命周期,FragmentTabHost + FragmentLayout布局框架,Fragment生命周期
  8. 列表、超链接、相对路径-HTML
  9. web.config从.net framework3.5向4.0迁移注意事项
  10. 数据库的增加,删除,更新操作--mysql
  11. vSphere虚拟机磁盘热扩容
  12. FPGA信号处理系列文章——相关与卷积
  13. Ingress session sticky
  14. 分享个解决右键没有新建TXT文档的办法
  15. 使用线程持续产生随机数
  16. cmd批量修改文件名 增加文字_文件名如何进行批量更改?
  17. WordPress修改默认邮箱、用户名(图解)
  18. 2022年4月23日,第16天
  19. 所有私有、共享IP段(全)
  20. shell脚本的俄罗斯方块 : )

热门文章

  1. U盘做系统启动盘后内存变小的解决办法
  2. 算法岗面试复盘| 阿里、百度、作业帮、华为
  3. 笔记本液晶屏白屏维修一例[原创]
  4. CycleGAN与pix2pix训练自己的数据集-Pytorch
  5. 我想请问在中国一级和二级硕士点它们有什么区别?所以我可不可以这样理解,一级硕士点获得的是学术学位,二级硕士学位获得的是专业学位请问为什么accountable不是可以数清的意思,而是有责任心
  6. 两张图学会VIM编辑器
  7. Spring循环依赖解决源码解析
  8. Python 3.7.1 模块 functools
  9. 写一篇怎样判断三角形相似的逐字稿
  10. 程序员麦兜【编程笔记】-谈谈单例模式