浏览器模拟 - Python

时间:2010-04-02 16:16:12

标签: python session browser cookies

我需要通过Python脚本访问几个HTML页面,问题是我需要COOKIE功能,因此简单的urllib HTTP请求将无法工作。

有什么想法吗?

4 个答案:

答案 0 :(得分:14)

结帐Mechanize。 “Python中有状态的程序化网页浏览” 它自动处理cookie。

import mechanize

br = mechanize.Browser()
resp = br.open("http://www.mysitewithcookies.com/")
print resp.info()  # headers
print resp.read()  # content

mechanize还公开了urllib2 API,默认情况下启用了cookie处理。

答案 1 :(得分:3)

cookielib module为HTTP客户端提供cookie处理。

  

cookielib模块定义了自动处理HTTP cookie的类。它对于访问需要小数据的网站(cookie)非常有用,可以通过来自Web服务器的HTTP响应在客户端计算机上设置,然后在以后的HTTP请求中返回到服务器。

文档中的示例显示了如何结合urllib处理Cookie:

import cookielib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")

答案 2 :(得分:2)

这是做cookie的东西,作为奖励对需要用户名和密码的网站进行身份验证。

import urllib2
import cookielib
import string



def cook():
    url="http://wherever"
    cj = cookielib.LWPCookieJar()
    authinfo = urllib2.HTTPBasicAuthHandler()
    realm="realmName"
    username="userName"
    password="passWord"
    host="www.wherever.com"
    authinfo.add_password(realm, host, username, password)
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), authinfo)
    urllib2.install_opener(opener)

    # Create request object
    txheaders = { 'User-agent' : "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)" }
    try:
        req = urllib2.Request(url, None, txheaders)
        cj.add_cookie_header(req)
        f = urllib2.urlopen(req)

    except IOError, e:
        print "Failed to open", url
        if hasattr(e, 'code'):
            print "Error code:", e.code

    else:

        print f
        print f.read()
        print f.info()
        f.close()
        print 'Cookies:'
        for index, cookie in enumerate(cj):
            print index, " : ", cookie      
        cj.save("cookies.lwp")

答案 3 :(得分:0)

为什么不为此尝试Dryscrape:

Import dryscrape as d
d.start_xvfb()
Br = d.Session()
Br.visit('http://URL.COM')
#open webpage
Br.at_xpath('//*[@id = "email"]').set('user@enail.com')
#finding input by id
Br.at_xpath('//*[@id = "pass"]').set('pasword') 
Br.at_xpath('//*[@id = "submit_button"]').click()
#put id of submit button and click it

您不需要cookie lib存储cookie只需安装Dryscrape并以您的风格进行操作