如何使用Selenium获取有关所有域的cookie?

时间:2019-07-13 03:05:56

标签: php laravel selenium cookies webdriver

我正在使用Selenium和Laravel进行自动测试。很好,但cookie存在问题。每次运行自动测试进行网站抓取时,我都必须登录。我想保留我的登录信息,因此我在Selenium中使用了以下代码来存储网站的Cookie信息。

$driver->manage()->getCookies();

但是,多个域中有很多cookie,但是仅存储来自特定域的cookie。 当前的连接页面

我不知道如何在cookie列表中存储所有域的cookie。

1 个答案:

答案 0 :(得分:0)

重复使用Cookie

如果您已存储来自域example.com的Cookie,则无法通过Webdriver会话将这些存储的Cookie推送到任何其他不同的域,例如example.edu。存储的Cookie只能在example.com中使用。此外,要在将来自动登录用户,您只需要存储一次cookie,那就是该用户在成功进行身份验证之后已经在应用程序中登录的时间。在重新添加cookie之前,您需要浏览到收集cookie的相同域。


使用Selenium Python的演示

例如,一旦用户在应用程序中登录,就可以存储cookie,如下所示:

from selenium import webdriver
import pickle

driver = webdriver.Chrome()
driver.get('http://demo.guru99.com/test/cookie/selenium_aut.php')
driver.find_element_by_name("username").send_keys("abc123")
driver.find_element_by_name("password").send_keys("123xyz")
driver.find_element_by_name("submit").click()

# storing the cookies
pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))
driver.quit()

以后,如果您希望用户自动登录,则需要先浏览到特定的域/ url,然后必须按以下方式添加cookie:

from selenium import webdriver
import pickle

driver = webdriver.Chrome()
driver.get('http://demo.guru99.com/test/cookie/selenium_aut.php')

# loading the stored cookies
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:
    # adding the cookies to the session through webdriver instance
    driver.add_cookie(cookie)
driver.get('http://demo.guru99.com/test/cookie/selenium_cookie.php')

参考

您可以在以下位置找到详细的讨论: