You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Python的Selenium操作人类已登录的现有浏览器会话?

解决方案:复用已登录浏览器会话绕过反爬登录页

针对你遇到的「登录页反爬强无法用Selenium登录,但登录后可正常操作,且不能启动新WebDriver需复用已有会话」的问题,这里有两个靠谱的实操方案:

方案一:通过浏览器远程调试端口连接已有会话

这是最贴合你需求的方式——让已打开的浏览器开启远程调试,再用Selenium「接管」这个会话:

  • 步骤1:启动浏览器时开启调试端口
    以Chrome为例(其他内核浏览器类似),右键浏览器快捷方式,在「目标」栏末尾添加参数:
    --remote-debugging-port=9222 --user-data-dir="C:\ChromeTempSession"
    
    C:\ChromeTempSession可以换成任意你想指定的临时目录,确保浏览器加载这个目录的会话)
    启动后,手动完成目标网站的登录,保持标签页不要关闭。
  • 步骤2:用Selenium连接调试会话
    编写代码时,不要初始化全新的WebDriver,而是直接连接到已开启的调试端口:
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
    driver = webdriver.Chrome(options=chrome_options)
    # 现在driver就完全控制你已经登录的浏览器窗口了,直接操作后续页面即可
    driver.get("https://目标网站的操作页面")
    
  • 注意事项:确保9222端口没有被其他程序占用,且浏览器启动时指定的用户目录和代码逻辑一致。

方案二:导入已登录的浏览器用户数据目录

如果你已经有一个登录过目标网站的浏览器配置目录,可以让Selenium直接加载这个目录,跳过登录步骤:

  • 步骤1:找到浏览器用户数据目录
    Windows默认路径:C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data
    Mac默认路径:~/Library/Application Support/Google/Chrome/
  • 步骤2:用Selenium加载该目录
    代码中指定用户数据目录,启动的WebDriver会直接复用已登录的会话:
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    # 注意:使用前必须关闭所有正在运行的Chrome实例,否则会因为目录被占用报错
    chrome_options.add_argument(r"user-data-dir=C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data")
    chrome_options.add_argument("--profile-directory=Default")  # 用默认配置文件,多配置文件可修改此处
    driver = webdriver.Chrome(options=chrome_options)
    # 此时打开的浏览器已是登录状态,直接执行操作即可
    

针对APP场景的额外建议

因为你的程序用于APP且不能启动新WebDriver,优先推荐方案一

  • 可以在APP中触发打开带远程调试参数的浏览器,引导用户手动完成登录;
  • 之后APP内的Selenium代码直接连接9222端口,就能操作用户已打开的标签页和会话;
  • 这种方式不需要关闭用户正在使用的浏览器,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Golabie Plus

火山引擎 最新活动