python 模拟浏览器操作_python 使用 mechanize 模拟浏览器访问网页

知道如何快速在命令行或者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/p_w_picpaths/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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值