前言

利用 Selenium 获取已经打开的浏览器窗口,全python操作

标题 链接
【Selenium】控制当前已经打开的 chrome浏览器窗口 https://blog.csdn.net/weixin_45081575/article/details/112621581
【Selenium】控制当前已经打开的 chrome浏览器窗口(高级篇) https://blog.csdn.net/weixin_45081575/article/details/126389273

不同的是,本次全是用python来进行操作,省去了手动打开浏览器的操作,也相当于是节省了一点点功夫。与上一篇有异曲同工之妙。

这里使用 chrome浏览器 来做示例。

整个下来主要有两个步骤,

  1. 手动打开浏览器,
  2. 使用 Python程序 去获取到手动打开的 chrome浏览器

应用场景(理论上)

  1. 登录账号并且需要输入手机验证码的网站;
  2. 登录账号并且需要人机验证的网站(如图片点选、文字点选等人机验证;

1. 查看浏览器信息

在 chrome浏览器的地址栏中输入 chrome://version,如下图所示

C:\Program Files\Google\Chrome\Application\chrome.exe 这个是chrome 可执行路径。mark下来有用。

2. 代码释义

在cmd命令行窗口输入以下指令

  • start chrome:从命令行启动 chrome 应用程序
  • 释义:以调试模式打开浏览器,端口为9527,存放文件配置路径在F:\selenium(会自动创建)
start chrome --remote-debugging-port=9527 --user-data-dir="F:\selenium"

看以下动图

3. Python执行cmd命令

在Python的内置库中,os 和 subprocess 可以执行cmd命令(还有其它的,暂不表)

下面来展示他们的用法。

os模块是Python 自带的一个操作系统接口模块,详见 OS模块介绍。

在这里主要用到它的 os.popen 命令,

代码如下

  • 使用os.popen即可执行cmd命令~(os.popen包装了sunprocess.Popen方法)
import os
os.popen('start chrome --remote-debugging-port=9527 --user-data-dir="F:\selenium"')

看以下动图~

以下代码都可以调用cmd命令,效果基本上是一致的。想选用哪个就先实践一番,再做决定吧~

os.popen

import os# 方法一
os.popen(r'start chrome.exe --remote-debugging-port=9527 --user-data-dir="F:\selenium\"')# 方法二
# 先切换到chrome的可执行文件路径,再执行cmd命令。注意这里没有 start
os.chdir(r"C:\Program Files\Google\Chrome\Application")
os.popen('chrome --remote-debugging-port=9527 --user-data-dir="F:\selenium"')

os.system

import os# 方法一
os.system(r'start chrome --remote-debugging-port=9527 --user-data-dir="F:\selenium"')# 方法二
# 先切换到chrome的可执行文件路径,再执行cmd命令。注意这里没有 start
os.chdir(r"C:\Program Files\Google\Chrome\Application")
os.system(r'chrome --remote-debugging-port=9527 --user-data-dir="F:\selenium"')

subprocess.Popen

import os
import subprocess# 先切换到chrome可执行文件的路径
os.chdir(r"C:\Program Files\Google\Chrome\Application")
# 然后使用Popen执行cmd命令,这里的chrome.exe 可替换为 chrome,注意这里没有 start
subprocess.Popen('chrome.exe --remote-debugging-port=9527 --user-data-dir="F:\selenium"')

4. Selenium的一些基础

这里我们来看看,怎么通过Selenium去接管已经打开的 chrome。
这些都是基于 Chrome DevTools Protocol,感兴趣的可以深入去学习了解。


示例代码

from selenium import webdriverif __name__ == '__main__':browser = webdriver.Chrome()browser.get('https://www.csdn.net/')# 获取远程链接的地址print('remote_url:', browser.caps['goog:chromeOptions']['debuggerAddress'])print('session_id:', browser.session_id)print(browser.title)

用调试模式执行以上代码,看到下图

  • {'debuggerAddress': 'localhost:64829'} ,,,这是关键所在,贯穿全文。

其中,需要关心的是 debuggerAddress 参数,将它填充到下面的Url

  • 注意填充的内容需要是你当前 Selenium 的 localhost:port,不是我这个!!!
填充前 填充后 作用(表达可能有误,但大体如此)
http://{localhost:port}/json http://localhost:64829/json 查看当前窗口的页面连接
http://{localhost:port}/json/version http://localhost:64829/json/version 查看窗口远程链接

远程调试

访问 http://localhost:64829/json/,如下图所示,


*****
点击 devtoolsFrontendUrl(开发工具前端Url),可以到调试界面,这个可以用作于远程调试。暂不表~


获取远程链接

接下来使用浏览器访问该Url: http://localhost:64829/json/version ,如下图所示

  • 圈出来的webSocketDebuggerUrl(调试器Url),是远程链接的地址,若使用 puppeteer的话能用到

5. Python程序接管 已打开的浏览器

代码

  • 这里的端口号需要修改成与上面debuggerAddress一致

from selenium import webdriver
from selenium.webdriver.chrome.options import Options# 以下代码是使用 Python 接管已经打开的浏览器
options = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:64829")
browser = webdriver.Chrome(options=options)browser.get('https://www.bilibili.com/')
print(browser.title)    # 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

代码运行后,可以看到如下:已经将 csdn 修改成 bilibili ,且访问成功了


以上,只是为了说明***(其实不知道说明了什么)
下面将使用 Python去进行上述的全部操作,即控制已经打开的浏览器。

实例

譬如,我这里需要登录CSDN,然后再使用Selenium去接管chrome

代码如下:

  • 中间加入的 input 乃是精髓,直到你完成登录操作后,再去手动触发后面的程序 执行。
import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Optionsif __name__ == '__main__':os.system(r'start chrome --remote-debugging-port=9527 --user-data-dir="F:\selenium"')# 此乃精髓input('输入空格继续程序...')options = Options()options.add_experimental_option("debuggerAddress", "127.0.0.1:9527")browser = webdriver.Chrome(options=options)print(browser.title)print()# 这里是你的其它逻辑"""获取粉丝数量获取所有新增文章获取所有文章的观看数量"""

运行之后可以看到,
浏览器窗口请求了新的 URL(https://www.bilibili.com),并且获取到了当前页面的 title和运行其它逻辑(如果有的话~)

6. 总结

调用我的代码,直接运行即可控制当前浏览器窗口。


后话

自己动手操作一番,岂不美哉?
See you

【Selenium】控制当前已经打开的 chrome浏览器窗口(高级版)相关推荐

  1. 【Selenium】控制当前已经打开的 chrome浏览器窗口

    前言 有过几个小伙伴问过我如何利用 Selenium 获取已经打开的浏览器窗口,这里给安排了,还安排了两篇. 标题 链接 [Selenium]控制当前已经打开的 chrome浏览器窗口 https:/ ...

  2. selenium:使用已打开的chrome浏览器

    前言 环境参考 selenium:我的第一个程序 使用已打开的chrome浏览器有啥好处 不用验证登陆状态,可以先登陆,再爬虫 不用反复开浏览器 开启命令行启动 chrome.exe 找到 chrom ...

  3. linux打开浏览器密码取消,Deepin下打开谷歌chrome浏览器提示解锁登录密钥环的解决方法...

    在Deepin Linux系统下打开谷歌chrome浏览器都提示解锁登录密钥环,每次登录打开浏览器都会提醒(解锁登录密钥环:输入密码以解锁您的登录密钥环,您用于登录计算机的密码与您的登录密钥环中的密码 ...

  4. chrome 窗体高度_控制Chrome浏览器窗口最小宽度和高度

    控制 Chrome 浏览器窗口最小宽度和高度 (原创) 最近通过 Chrome 浏览器做 UI , Golang 作为主体语言的方式做了一个本地信息搜索的小工具, 核心的两个表列是捆绑对齐的,但在浏览 ...

  5. python控制已经打开的浏览器_使用python+selenium控制手工已打开的浏览器

    我们可以利用Chrome DevTools协议.它允许客户检查和调试Chrome浏览器. 打开cmd,在命令行中输入命令: chrome.exe --remote-debugging-port=922 ...

  6. Python+selenium 自动化-操作已启用的chrome浏览器实例演示,chrome启用调试端口方法

    首先在 chrome 快捷方式的目标后面加上这个参数. 前面是代表调试端口,可以随便用端口,后面指向一个新的文件夹用于存储用户数据. 注: 后面的参数如果不加上,端口启用好像会失败,目前没有找到原因. ...

  7. 解决python+selenium自动化,打开谷哥浏览器窗口么会自动关闭问题

    # 导包 from selenium import webdriver from selenium.webdriver.common.by import By # 实例化浏览器,且浏览器对象的初始化放 ...

  8. Python+selenium 自动化-启用带插件的chrome浏览器,调用浏览器带插件,浏览器加载配置信息。

    正常的话我们启用的 chrome 浏览器是不带插件的,如果你能登陆 chrome 的话,你会发现登陆信息也没有,还有不管你怎样设置每次新打开的 chrome 都是默认设置的. 我们正常启动的浏览器每次 ...

  9. [Selenium] 如何在老版本的Chrome 浏览器上使用selenium

    由于Chrome Driver 只兼容Chrome  浏览器12.0.712.0 和之后的新版本,会因此如果要在老版本的Chrome  浏览器上使用Selenium, 则只能使用 SeleniumRC ...

最新文章

  1. RenderingHints 参数
  2. 【蓝桥杯-第五届】 啤酒和饮料
  3. java高性能阻塞队列,Linux c/c   后台开发组建之:高性能阻塞队列
  4. 为什么apm代购价那么便宜_为什么长焦相机那么便宜而单反相机那么贵
  5. [蓝桥杯2018初赛]第几个幸运数-数论+枚举
  6. 减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现
  7. java -jar 默认参数_JAVA入门学习指南,建议收藏
  8. mysql 5.7 内存占用_MySQL 5.7 内存使用计算
  9. 有关ACM学习的博客链接
  10. Arduino学习笔记14
  11. 二分(POJ - 3273 )
  12. android camera 废弃,在Ubuntu系统基于ROS使用废旧Android手机摄像头搭建监控设备
  13. java 生成ai矢量图_AI利用自己的工具将位图转换为矢量图
  14. 细数泄漏过的数据库,目前已知公开的!
  15. mingw64镜像网站
  16. 几点思考-人生哲学,生活方式---ShinePans
  17. 16代表啥_16代表的爱情恋爱含义16代表什么爱情含义
  18. 零基础转行做IT程序员要学哪些知识?
  19. single-row subquery returns more than one row
  20. Java基础|一图总结Java File类(与IO密切相关)

热门文章

  1. 【Machine Learning 学习笔记】feature engineering中noisy feature的影响
  2. 【less】项目工程化 (@import)
  3. 已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。
  4. OSChina 周六乱弹 ——马云要入房市,淘宝个房子?
  5. splint 编译安装
  6. 三个好用的中文免费刻录软件
  7. 给未来的你---李开复
  8. MATLAB入门教程(4):矩阵的生成
  9. Google hack 语法
  10. Python IDLE 以及常用函数