当前位置: 首页 > 知识库问答 >
问题:

Selenium-在计算机之间共享浏览器会话(cookie、本地存储)

都博裕
2023-03-14

我需要在两台计算机之间转移我的Selenium会话。

要通过Selenium导出和导入cookie,您必须单独访问每个网站,然后才能设置其cookie,我希望避免这种情况。我还想复制本地存储。

以下是我迄今为止所尝试的:

1-启动新鲜硒会话:

driver = webdriver.Chrome()

2 - 在%temp%中找到其临时Chrome用户配置文件,并将其复制到我的应用程序的文件夹中

3-使用此用户配置文件启动新驱动程序:

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("user-data-dir=C:\\profiles\\temp_profile")
driver = webdriver.Chrome(chrome_options=chrome_options)

上面的工作-本地存储和cookie仍然在我的本地PC上,但是,当我将这个用户配置文件复制到另一台PC并启动它时,本地存储仍然在那里,但是cookie不见了。

我也尝试过使用常规的chrome配置文件,以及尝试直接在Chrome而不是Selenium中启动用户配置文件,但cookies仍然不存在。

共有3个答案

秦渝
2023-03-14

我回复这个是因为它出现在我的谷歌搜索中。

也许这与Chrome加密cookie的方式有关,因此您需要在两台机器上使用相同的证书才能进行复制粘贴。

看看:https://github.com/bertrandom/chrome-cookies-secure

使用它,您仍然需要了解该域,但您不需要实际访问该网站。

公良凯
2023-03-14

我使用的一种解决方案是将cookies腌制并在计算机之间共享

#save cookies
import pickle
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("detach",True)
options.add_experimental_option('prefs', {'credentials_enable_service': False, 'profile': {'password_manager_enabled': False}})
driver = webdriver.Chrome(options=options,executable_path="./chromedriver")
# do login steps, so cookies can be set
pickle.dump(driver.get_cookies(), open("cookies.pkl", "wb"))

然后你可以在另一边放饼干

#load cookies
import pickle
from selenium import webdriver
driver.get("http://www.example.com")
cookies = pickle.load(open("cookies.pkl","rb"))
for cookie in cookies:
    driver.add_cookie(cookie)

和计算机之间的 cookies.pkl 文件

上官羽
2023-03-14

由于Cookie存储在Chrome的SQLite文件中,并且它们是加密的,所以您不知道(或想深入了解…)为什么它不工作。这可能与信息安全有关。

因此,我的建议是使用WebDriver的功能保存它们并将它们加载到内存中。请参阅此处。

 类似资料:
  • 问题内容: 我的网站上有一些值,要在关闭浏览器时清除这些值。我选择存储这些值。当选项卡关闭时,它们确实被清除,并且如果用户按下f5则保留;但是,如果用户在其他选项卡中打开某些链接,则这些值不可用。 如何在应用程序的所有浏览器选项卡之间共享值? 用例:将值存储在某个存储器中,使该值可在所有浏览器选项卡中访问,并在所有选项卡都关闭时清除它。 问题答案: 您可以使用localStorage及其“存储”

  • 用例:将一个值放入某个存储区,在所有浏览器选项卡中保持该值可访问,并在所有选项卡关闭时清除该值。

  • 问题内容: 是否有使用节点,表达和redis / predis共享PHPSESSID的最新指南(或示例代码)? 我发现有1-2年的一些教程,它们都使用旧版本的Express或不使用Express。 Express cookie解析器也已弃用。 https://simplapi.wordpress.com/2012/04/13/php-and-node-js-session-share- redi/

  • 问题内容: 我正在使用JavaScript客户端(在浏览器中运行)和Node.js服务器创建一个小型应用程序,并使用WebSocket进行通信。 我想在客户端和服务器之间共享代码。至少可以说,我才刚刚开始使用Node.js,而我对现代JavaScript的了解还有些生疏。因此,我仍然对CommonJS require()函数有所了解。如果我使用“导出”对象创建程序包,那么我将看不到如何在浏览器中使

  • 问题内容: 我的问题如下:如何在不同Java类中的测试中重复使用浏览器会话?我打开了这样的浏览器: 然后,我必须使用一些凭据登录网站,并在登录后想执行其他测试,所以我不想为每个测试都登录,因为我需要进行很多测试并为每个用户登录花十年时间。例如,流程如下所示:登录->推送一些组件->添加一些值->生成报告。在此之后,我想在另一个组件上生成其他报告,但是当我尝试使用它时,将给出一个空指针异常。有任何想

  • 问题内容: 我们有一个搜索表单,其中过滤器绑定到托管bean(会话范围)上的属性。它不是组件绑定,它的属性绑定像。 来自不同机器(然后是不同的会话)的提交数据混合在一起。您搜索“ john”,并得到“ mary”,因为您旁边的那个人刚刚搜索了“ mary”。您的价值在于获取 他 提交的数据而不是您的数据。 我已经在Google上搜索了很多,没有找到解决方案,只是发生了同样的问题。 有人遇到过这个问