首页 > 其他分享 >【Selenium】控制当前已经打开的 chrome浏览器窗口(高级版)

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

时间:2024-02-01 19:44:24浏览次数:26  
标签:浏览器 chrome selenium Selenium -- import os

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

前言

 

https://blog.csdn.net/weixin_45081575/article/details/126389273

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

不同的是,本次全是用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 webdriver

if __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 Options

if __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

标签:浏览器,chrome,selenium,Selenium,--,import,os
From: https://www.cnblogs.com/dabaixiong/p/18001987

相关文章

  • 使用js获取系统分辨率、系统缩放倍数和浏览器缩放倍数
    做屏幕适配让人头大,用rem适配需要获取到系统缩放倍数和浏览器缩放倍数来计算根节点字体大小,网上找来找去都没看见一个满意的方案,自己折腾一个算是一个比较完美的方案吧,亲测谷歌浏览器120版本有效//获取缩放倍数(1*系统缩放倍数*浏览器缩放倍数)functiongetZoom(){letzoom=......
  • 浏览器支持多线程下载,IDM还是地表最强吗?
    引言平时大家下载小文件一般会用浏览器自带的下载,而大文件却要搭配下载器(比如有亿点点贵的IDM),但是大家知道吗,我们的浏览器自带多线程下载,只是默认是禁用的,试了试真的还不错!启动新功能这里以新版MicrosoftEdge为例,打开edge://flags/#enable-parallel-downloading(Chrome为c......
  • msedge selenium 驱动器下载地址
    MicrosoftEdge网络驱动程序|MicrosoftEdge开发人员---MicrosoftEdgeWebDriver|MicrosoftEdgeDeveloper msedge  MicrosoftEdge网络驱动程序|MicrosoftEdge开发人员---MicrosoftEdgeWebDriver|MicrosoftEdgeDeveloper msedge https://develop......
  • Python+Selenium 自动化测试
    自动化测试是把以人为驱动的测试行为转化成机器执行的一种过程,通常在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较,再此过程中,为了节省人力,时间或硬件资源,提高测试效率,便引用了自动化测试的概念Selenium:是一套代码......
  • 物联网浏览器(IoTBrowser)-Modbus协议集成和测试
    Modbus协议在应用中一般用来与PLC或者其他硬件设备通讯,Modbus集成到IoTBrowser使用串口插件模式开发,不同的是采用命令函数,具体可以参考前面几篇文章。目前示例实现了Modbus-Rtu和Modbus-Tcp两种,通过js可以与Modbus进行通讯控制。   一、开发插件添加引用添加NModbus4,......
  • python selenium i 不再自动退出
    官网https://chromedriver.chromium.org/home  chrome版本  版本109.0.5414.120(正式版本)(64位) driver 版本indexof/109.0.5414.74/  ##导入selenium#fromseleniumimportwebdriver##选择谷歌浏览器#driver_path=r"C:\ProgramFiles\Googl......
  • chrome驱动 selenium
    chrome驱动selenimchromedriver下载地址:ChromeDriver-WebDriverforChrome-Downloads官网下载地址: https://chromedriver.com/官网下载地址114版本以下:ChromeDriver114andolderversionsdownloadChromeDriverDownloadReleaseStable/Beta/Dev/Canary......
  • anaconda+jupyter书写python简简简简简易安装教程,浏览器编写执行Python程序
    anaconda+jupyter书写python简简简简简易安装教程,浏览器编写执行Python程序目录 1、安装anaconda2、打开JupyterNotebook3、创立ipynb文件编写python代码 4、导出python文件(.py)1、安装anaconda下载地址:www.anaconda.com点击Download会下载一个大约600M的安装包,......
  • axios实现,在一个极短时间内,请求同一个接口,若传参完全一样,则使用浏览器中的缓存中的上
    axios实现,在一个极短时间内,请求同一个接口,若传参完全一样,则使用浏览器中的缓存中的上次的值。同时,上次的值应该在指定时间内可以自动清除。请写一个axios适配器。实现上述功能。在axios中,我们可以利用浏览器的缓存机制(HTTP缓存)来实现这个需求。不过,浏览器的HTTP缓存主要依赖于服......
  • 浏览器存储 LocalForage
    浏览器存储LocalForagecookie、session、LocalStorage存在一定的缺点存储量小存值和取值需要经过序列化和反序列化虽然IndexedDB可以用数据库这种形式来玩转本地化存储,然而它的使用比较复杂LocalForage,就相当于轻松的使用IndexedDB,它们俩都是异步的异步,即存储大文件的时......