2010-04-02 66 views
8

Tôi cần truy cập một vài trang HTML thông qua tập lệnh Python, vấn đề là tôi cần chức năng COOKIE, do đó yêu cầu HTTP urllib đơn giản sẽ không hoạt động.Mô phỏng trình duyệt - Python

Bất kỳ ý tưởng nào?

+0

Một số triển khai dựa trên JavaScript của Python có sẵn (có thể chạy trong trình duyệt web mà không cần bất kỳ plugin bổ sung nào). Điều này có liên quan không? http://syntensity.com/static/python.html –

Trả lời

14

séc ra Mechanize. "Trình duyệt web có lập trình trạng thái trong Python".
Nó xử lý cookie tự động.

import mechanize 

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

cơ giới hóa cũng hiển thị API urllib2, với xử lý cookie được bật theo mặc định.

+0

Có thể khá chậm mặc dù, vì vậy YMMV. –

+0

Gregg, bạn có thể giải thích? về cơ bản của nó chỉ là một wrapper xung quanh urllib2 –

+0

@Gregg bạn có thể giải thích? : D – RadiantHex

2

Dưới đây là điều gì đó thực hiện cookie và làm tiền thưởng thực hiện xác thực cho trang web yêu cầu tên người dùng và mật khẩu.

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") 
+0

@Mark: cảm ơn bạn rất nhiều! Điều này làm việc hoàn hảo! – RadiantHex

+0

có thể bạn nên chấp nhận câu trả lời, RH, nếu bạn làm việc này cho bạn. –

3

cookielib module cung cấp xử lý cookie cho khách hàng HTTP.

Mô-đun cookielib xác định các lớp để tự động xử lý cookie HTTP. Nó rất hữu ích để truy cập các trang web yêu cầu các mẩu dữ liệu nhỏ - cookie - được đặt trên máy khách bằng phản hồi HTTP từ máy chủ web và sau đó quay lại máy chủ trong các yêu cầu HTTP sau này.

Các ví dụ trong chương trình doc làm thế nào để xử lý các tập tin cookie kết hợp với urllib:

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

Tại sao bạn không thử Dryscrape cho việc này:

Import dryscrape as d 
d.start_xvfb() 
Br = d.Session() 
Br.visit('http://URL.COM') 
#open webpage 
Br.at_xpath('//*[@id = "email"]').set('[email protected]') 
#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 

Bạn không cần Cookie lib để lưu trữ các tập tin cookie chỉ cần cài đặt Dryscrape và làm điều đó trong phong cách của bạn

+0

Vui lòng không sử dụng câu trả lời để quảng cáo cho một câu hỏi khác. Đó là những gì bounties được cho – Machavity

+0

Ok xin lỗi vì điều đó nhưng không có cơ thể trả lời câu hỏi của tôi thats tại sao bất kỳ cách xin lỗi một lần nữa – Harry1992

Các vấn đề liên quan