2014-03-05 84 views
2

我被告知要對我們面向前臺的網站進行cookie審計,現在我們擁有很多域名,所以我真的不會去手動挖掘每一個提取cookie。我決定和硒一起去。這工作到我想要抓取第三方cookies的地步。讓硒抓住所有的cookies

目前(蟒蛇)我可以做

driver.get_cookies() 

對於從我的域設置的所有Cookie,但這並沒有給我任何谷歌,Twitter的,Vimeo或其他第三方的cookies

我已經嘗試修改firefox驅動程序中的cookie權限,但它沒有幫助。任何人都知道我可以如何獲得tehm

回答

0

是的,我不相信Selenium允許您與當前域以外的cookie進行交互。

如果您知道有問題的域名,那麼您可以導航到該域名,但我認爲這不太可能。

這將是一個巨大的安全風險,如果您可以訪問餅乾跨站點

+0

但其它領域仍設置cookies在通常的瀏覽器。 –

2

硒只能得到當前域的餅乾:

getCookies

java.util.Set中的getCookies ()

獲取當前域的所有cookie。這是 呼叫「的document.cookie」相當於和解析結果

不管怎樣,我聽到有人用一個Firefox插件能夠將所有的cookies保存在XML。據我所知,這是你最好的選擇。

2

你的問題已經回答了在計算器上here

第1步:您需要下載並安裝「獲取XML所有Cookie」擴展的Firefox從here(不要忘記安裝後重新啓動Firefox延期)。

第二步:執行此Python代碼有硒的FirefoxWebDriver所有Cookie保存到一個XML文件,然後讀取該文件:

from xml.dom import minidom 
from selenium import webdriver 
import os 
import time 


def determine_default_profile_dir(): 
    """ 
    Returns path of Firefox's default profile directory 

    @return: directory_path 
    """ 
    appdata_location = os.getenv('APPDATA') 
    profiles_path = appdata_location + "/Mozilla/Firefox/Profiles/" 
    dirs_files_list = os.listdir(profiles_path) 
    default_profile_dir = "" 
    for item_name in dirs_files_list: 
     if item_name.endswith(".default"): 
      default_profile_dir = profiles_path + item_name 
    if not default_profile_dir: 
     assert ("did not find Firefox default profile directory") 

    return default_profile_dir 


#load firefox with the default profile, so that the "Get All Cookies in XML" addon is enabled 
default_firefox_profile = webdriver.FirefoxProfile(determine_default_profile_dir()) 
driver = webdriver.Firefox(default_firefox_profile) 


#trigger Firefox to save value of all cookies into an xml file in Firefox profile directory 
driver.get("chrome://getallcookies/content/getAllCookies.xul") 
#wait for a bit to give Firefox time to write all the cookies to the file 
time.sleep(40) 

#cookies file will not be saved into directory with default profile, but into a temp directory. 
current_profile_dir = driver.profile.profile_dir 
cookie_file_path = current_profile_dir+"/cookie.xml" 
print "Reading cookie data from cookie file: "+cookie_file_path 

#load cookies file and do what you need with it 
cookie_file = open(cookie_file_path,'r') 
xmldoc = minidom.parse(cookie_file) 

cookie_file.close() 
driver.close() 

#process all cookies in xmldoc object