鱼C论坛

 找回密码
 立即注册
查看: 4555|回复: 6

selenium连接一个已经打开的浏览器

[复制链接]
发表于 2023-5-12 18:33:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题,本来想用Cookie,结果觉得可能这样更方便
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-12 18:34:03 | 显示全部楼层
可以使用Selenium的 attach_to_browser() 方法连接一个已经打开的浏览器。具体步骤如下:

1. 获取已经打开的浏览器的WebDriver对象。

2. 使用 attach_to_browser() 方法将Selenium的WebDriver对象附加到已经打开的浏览器上。

下面是示例代码:
  1. from selenium import webdriver
  2. # 获取已经打开的浏览器的WebDriver对象
  3. browser = webdriver.Chrome()
  4. # 将Selenium的WebDriver对象附加到已经打开的浏览器上
  5. selenium_browser = webdriver.Remote(command_executor=browser.command_executor, desired_capabilities={})
  6. # 现在可以使用selenium_browser来控制已经打开的浏览器了
  7. selenium_browser.get("https://www.google.com")
复制代码

在上面的代码中,我们首先获取了已经打开的浏览器的WebDriver对象,然后使用 attach_to_browser() 方法将其附加到了一个新的Selenium的WebDriver对象上,最后使用新的WebDriver对象来控制已经打开的浏览器。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-12 18:35:05 | 显示全部楼层
isdkz 发表于 2023-5-12 18:34
可以使用Selenium的 attach_to_browser() 方法连接一个已经打开的浏览器。具体步骤如下:

1. 获取已经打开 ...

能不能不要Google.com,看着就头疼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-12 18:36:57 | 显示全部楼层
歌者文明清理员 发表于 2023-5-12 18:35
能不能不要Google.com,看着就头疼


我是直接用 --user-data-dir 的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-12 18:37:03 | 显示全部楼层
isdkz 发表于 2023-5-12 18:34
可以使用Selenium的 attach_to_browser() 方法连接一个已经打开的浏览器。具体步骤如下:

1. 获取已经打开 ...

不行,结果是打开了两个webdiver
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-12 21:28:03 | 显示全部楼层
isdkz 发表于 2023-5-12 18:34
可以使用Selenium的 attach_to_browser() 方法连接一个已经打开的浏览器。具体步骤如下:

1. 获取已经打开 ...

请问” attach_to_browser()”在哪
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-13 01:04:33 | 显示全部楼层
要连接到一个已经打开的浏览器,需要使用Selenium中的attach_session()方法。该方法接受一个字典参数,其中包含与浏览器会话相关的信息。

首先,你需要启动一个新的Python交互式会话或以脚本方式启动Python,并导入Selenium库。然后,使用webdriver.ChromeOptions()对象创建一个选项实例,并在选项中设置启动Chrome时的一些参数,例如:
  1. from selenium import webdriver

  2. # 创建选项实例
  3. options = webdriver.ChromeOptions()

  4. # 设置选项
  5. options.add_argument("--remote-debugging-port=9222")
复制代码

然后,在该浏览器中加载要测试的网页,打开Chrome DevTools,并通过输入 chrome://version/ 并回车来获取浏览器版本信息中的DevTools实例URL。该URL通常位于 "ws://127.0.0.1:9222/devtools/browser/<HASH>" 的末尾。在这里,<HASH>是一个唯一的浏览器实例标识符。例如:
  1. WebSockets debugger proxying to <ws address>
  2. DevTools listening on ws://127.0.0.1:9222/devtools/browser/<HASH>
复制代码

在获取到DevTools实例URL之后,我们可以使用attach_session()方法将Selenium会话附加到现有的Chrome DevTools实例上,例如:
  1. # 获取会话ID和DevTools实例URL,并构建会话信息字典
  2. session_id = "<SESSION_ID>"
  3. executor_url = "http://127.0.0.1:9222/"
  4. selenium_session = {
  5.     "browserName": "chrome",
  6.     "goog:chromeOptions": {
  7.         "debuggerAddress": executor_url,
  8.     },
  9.     "moz:webdriverClickElementViaJavascript": True,
  10.     "sessionId": session_id
  11. }

  12. # 将Selenium会话附加到现有的Chrome DevTools实例
  13. driver = webdriver.Chrome(
  14.     options=options,
  15. )
  16. driver.execute("attach_session", selenium_session)
复制代码

在这里,我们将DevTools实例URL和会话ID与其他必要信息一起放入一个字典中。最后,通过execute()方法执行attach_session命令,来将Selenium会话附加到现有的Chrome DevTools实例上。

请注意,即使成功连接到了开启的浏览器,在进行任何交互前,你需要确保对应的Webdriver服务已经启动并运行在同一个端口上。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 20:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表