Python 使用Selenium Web驱动程序每个选项卡一个会话?

Python 使用Selenium Web驱动程序每个选项卡一个会话?,python,python-3.x,selenium,selenium-webdriver,browser,Python,Python 3.x,Selenium,Selenium Webdriver,Browser,我想为我打开的每个选项卡创建一个新会话,然后使用Selenium python单独控制会话。这可能吗 @reynoldsnp:Firefox有一个官方插件可以实现这一点,但我不确定是否可以让selenium与该插件交互。addons.mozilla.org/en-GB/firefox/addon/multi-account-containers如果你想办法的话,我很想知道怎么做 (由于我的声誉得分,我还不能发表评论,因此引用了评论) 我不知道如何实际与扩展进行交互,但如果您有一组已知的站点,您希

我想为我打开的每个选项卡创建一个新会话,然后使用Selenium python单独控制会话。这可能吗

@reynoldsnp:Firefox有一个官方插件可以实现这一点,但我不确定是否可以让selenium与该插件交互。addons.mozilla.org/en-GB/firefox/addon/multi-account-containers如果你想办法的话,我很想知道怎么做

(由于我的声誉得分,我还不能发表评论,因此引用了评论)

我不知道如何实际与扩展进行交互,但如果您有一组已知的站点,您希望打开:

试试这个:

  • 使用selenium制作一个firefox配置文件供您使用

    Windows 8/8.1/10: 按键盘上的Win+R。 键入
    firefox--新实例--ProfileManager

  • 通过在安装向导中选择新配置文件,在该配置文件中打开Firefox。在该配置文件中安装扩展

  • 在扩展中设置您想要的容器,以便在默认情况下打开特定站点
  • 确保选中该复选框

  • 使用该配置文件启动selenium,如下所示:
  • 使用硒在标签和容器之间导航

  • 首先,不,你不能。选项卡作为进程运行时,会附加到最初打开浏览器的会话ID。这就是协议的工作原理

    但是,它们有一个唯一的ID,您可以使用它来识别它们并在它们之间切换

    driver.window_handles
    
    将为您提供打开选项卡的列表每个选项卡都是完全隔离的。您现在可以在两者之间进行选择

    driver.switch_to_window("any open tab taken from windows handles list")
    driver.do_something
    
    driver.switch_to_window("any other tab from windows handles list")
    driver.do_something_else_on_other_tab
    
    # or (this option can let you run in parallel)
    driver a = ChromeDriver()
    driver b = ChromeDriver()
    
    a.do_something
    b.do_something
    
    正如建议的那样(我个人也这么做),为每个选项卡打开新的会话,这样你就可以并行它们,并且运行得更快,总之


    我不确定多个浏览器或多个选项卡之间的性能差异有多大。。。它们应该使用几乎相同的资源。

    一个选项卡是驱动程序的同一个会话-但是可以有多个选项卡,您可以单独管理它们,但不能同时运行它们-您需要切换选项卡来控制它们。它将转到选项卡a,执行操作。转到选项卡b做动作等…是的,我理解。但是我可以在选项卡上使用不同的会话吗?就像选项卡A上的一个独立会话和选项卡B上的另一个会话一样,它们将共享会话数据—就像在普通浏览器中打开两个选项卡时一样。所以独立(隔离)没有,但如果您在them@nick318因为我可以通过多个选项卡而不是多个浏览器获得更高的性能:)单个会话。个人饼干。不同的标签,绝对值得一试。每个标签也可以使用单独的代理吗?@Lindau你是说:很好的黑客!我需要能够使用selenium动态打开新的隔离容器选项卡,因此手动为概要文件创建静态容器并不能满足我的需要。
    driver.switch_to_window("any open tab taken from windows handles list")
    driver.do_something
    
    driver.switch_to_window("any other tab from windows handles list")
    driver.do_something_else_on_other_tab
    
    # or (this option can let you run in parallel)
    driver a = ChromeDriver()
    driver b = ChromeDriver()
    
    a.do_something
    b.do_something