让selenium抓住所有的饼干

时间:2014-03-05 14:09:49

标签: python cookies selenium

我被告知要对我们面向前方的网站进行cookie审核,现在我们拥有很多域名,所以我真的不会手动挖掘每个提取cookie的人。我决定服用硒。这可以直到我想要抓住第三方cookie。

目前(python)我可以做到

driver.get_cookies()

对于从我的域名设置的所有Cookie,但这不会给我任何Google,Twitter,Vimeo或其他第三方Cookie

我尝试修改firefox驱动程序中的cookie权限,但它没有帮助。任何人都知道如何掌握tehm

4 个答案:

答案 0 :(得分:2)

Selenium只能获取当前域的cookie:

  

getCookies

     

java.util.Set getCookies()

     

获取当前域的所有Cookie。这相当于   调用“document.cookie”并解析结果

无论如何,我听说有人使用了一个能够以XML格式保存所有cookie的Firefox插件。据我所知,这是你最好的选择。

答案 1 :(得分:2)

您的问题已在StackOverflow here

上得到解答

第1步:您需要从here下载并安装Firefox的“获取所有Cookie in XML”扩展程序(请不要忘记在安装扩展程序后重新启动Firefox)。< / p>

Step2:执行此python代码,让Selenium的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

答案 2 :(得分:0)

是的,我不相信Selenium允许您与当前域以外的Cookie进行互动。

如果您知道有问题的域名,那么您可以导航到该域名,但我认为这不太可能。

如果您可以跨站点访问Cookie,那将是一个巨大的安全风险

答案 3 :(得分:-1)

您可以从配置文件文件夹中的浏览器sqlite数据库文件中获取任何cookie。 我在这里添加了更完整的答案: Selenium 2 get all cookies on domain