2013-06-17 20 views
5

Tôi đang làm việc trên một dịch vụ có thể nghe các URL, truy cập từng URL và nhận cookie cho từng yêu cầu.Làm thế nào để có được cookie của bên thứ 3?

Hiện nay tôi có một cái gì đó như thế này:

browser = webdriver.Firefox() 
browser.get('http://google.com') 
cookies = browser.get_cookies() 

#parse cookies 

Tuy nhiên, điều này chỉ mang lại cho tôi cookie bên thứ 1, nhưng tôi cũng cần phải nhận được các tập tin cookie bên thứ 3. Tôi phát hiện ra rằng trình điều khiển web Selenium không hỗ trợ điều này. Tôi muốn biết làm thế nào tôi có thể đạt được điều này? Tôi không giới hạn Selenium, vì vậy sẽ đánh giá cao các giải pháp khác.

+0

Dưới đây là làm thế nào để làm điều đó trong javascript: http: // www.electrictoolbox.com/javascript-get-all-cookie s/ – mitchfish36

+0

@ mitchfish36: Tôi cần phải làm điều đó với Python, nhưng dù sao, ví dụ của bạn chỉ có thể nhận được cookie của bên thứ nhất (cookie được đặt từ cùng một tên miền). Giải pháp hiện tại của tôi là sử dụng proxy và kiểm tra tiêu đề Set-Cookie trên phản hồi, nhưng tôi muốn sử dụng một cái gì đó ít phức tạp hơn. – deanrock0

Trả lời

4
import requests 
s = requests.session() 
r = s.get('http://google.com') 
r = s.get('http://facebook.net') 
for cookie in s.cookies: 
    print(cookie) 

http://python-requests.org/


Sử dụng: Selenium + PhantomJS

from selenium import webdriver 

cookie_file_path = 'cookie.txt' 

args = ['--cookies-file={}'.format(cookie_file_path)] 
driver = webdriver.PhantomJS(service_args=args) 
driver.get('http://google.com') 
driver.get('http://facebook.com') 
with open(cookie_file_path) as f: 
    print(f.read()) 

Output (bọc):

[General] 
cookies="@Variant(\0\0\0\x7f\0\0\0\x16QList<QNetworkCookie>\0\0\0\0\x1\0\0\0\a\0 
\0\0\xd6NID=67=SZetUV-oLq_M8ik40VT2GEIb45LMaXkhm6H3zx1wULO52qkCHPc9AML_p5eubW4zL 
Ms158YAYKQTdCJzb4mInix_Zek6P8Ej1XZh9h5Ng3I7X4gZuE_S-Fl2YpaSYd9B; HttpOnly; expir 
es=Wed, 18-Dec-2013 02:44:31 GMT; domain=.google.co.kr; path=/\0\0\0ldatr=kMm_Ue 
0P06lxFANs8c-wCgwG; HttpOnly; expires=Thu, 18-Jun-2015 02:44:32 GMT; domain=.fac 
ebook.com; path=/\0\0\0Kreg_fb_gate=https%3A%2F%2Fwww.facebook.com%2F; domain=.f 
acebook.com; path=/\0\0\0Jreg_fb_ref=https%3A%2F%2Fwww.facebook.com%2F; domain=. 
facebook.com; path=/\0\0\0\xa2PREF=ID=be651672f1ddac52:U=515e3545a8a53080:FF=0:T 
M=1371523471:LM=1371524047:S=iqfF3qNRUwVsInZR; expires=Thu, 18-Jun-2015 02:54:07 
GMT; domain=.google.com; path=/\0\0\0\xd4NID=67=pm8Ws9703eugHhhImX_hBpqhUyAhCUG 
TebjDZ6YY_cP7CuvIA4x8ElgGaj6tOweXFxxjALoX1PwqFvHHkUY1kerw3vwM-VaIyyPVSADMqOnR-Ty 
ed_bGU3bk6YSwUUeG; HttpOnly; expires=Wed, 18-Dec-2013 02:54:07 GMT; domain=.goog 
le.com; path=/\0\0\0\xa9PREF=ID=9769c9a2d96728cf:U=3d59c2548337b74e:FF=0:NW=1:TM 
=1371523471:LM=1371524047:S=vE5Y_06LhP4unse7; expires=Thu, 18-Jun-2015 02:54:07 
GMT; domain=.google.co.kr; path=/)" 
+1

Điều này chỉ nhận được cookie của bên thứ nhất được gửi bởi máy chủ. Tôi cũng cần cookie được đặt từ javascript. – deanrock0

+1

@ deanrock0, [Dùng thử này.] (Http://stackoverflow.com/a/15179516/2225682) – falsetru

+0

Cảm ơn, cả hai giải pháp, Selenium + PhanthomJS và Selenium + Google Chrome đều hoạt động. Với Google Chrome, bạn thậm chí không cần tệp cookie, vì .get_cookies() truy xuất cookie cho tất cả các miền. – deanrock0

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