【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等
【自动化】Python SeleniumUtil 工具
【Python】使用Selenium 操作浏览器 自动化测试 记录-CSDN博客文章浏览阅读58次。文章浏览阅读42次。【附件】Selenium chromedriver 驱动及浏览器下载。【附件】Selenium chromedriver 驱动及浏览器下载-CSDN博客。3.安装Chrome浏览器驱动。2.安装 selenium。1.安装python。https://blog.csdn.net/G971005287W/article/details/144557463
【学习记录】浏览器指纹相关学习记录(指纹介绍、获取指纹、修改指纹、随机指纹保护隐私等)-CSDN博客文章浏览阅读762次,点赞18次,收藏7次。可以识别是同一个用户。https://blog.csdn.net/G971005287W/article/details/144528762
【自动化】Python SeleniumUtil 油猴 工具 自动安装用户脚本-CSDN博客文章浏览阅读2次。【自动化】Python SeleniumUtil 工具-CSDN博客。【自动化】Python SeleniumUtil 油猴 工具。【自动化】Python SeleniumUtil 工具。https://blog.csdn.net/G971005287W/article/details/144565736
Python SeleniumUtil
import timefrom selenium.webdriver.support.wait import WebDriverWait
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ECclass SeleniumUtil:class 标签页:@staticmethoddef 切换到新窗口句柄(driver, before_handles, after_handles):# 检查是否有新的窗口句柄出现new_handles = after_handles - before_handlesif new_handles:# 切换到新打开的标签页new_window = new_handles.pop()driver.switch_to.window(new_window)return Trueelse:return False@staticmethoddef 获取所有已知窗口句柄(driver):return set(driver.window_handles)@staticmethoddef 切换到第一个窗口(driver):# 切换到第一个窗口driver.switch_to.window(driver.window_handles[0])@staticmethoddef 切换到当前窗口(driver):# 存储窗口的 IDoriginal_window = driver.current_window_handleprint(original_window)# 检查没有打开其他的窗口assert len(driver.window_handles) == 1class Driver:#初始化浏览器@staticmethoddef 初始化驱动通过Debug模式(驱动路径, debuggerAddress):# 设置Edge选项options = webdriver.ChromeOptions()# options.add_experimental_option('prefs',{"extensions.ui.developer_mode": True,})options.add_experimental_option("debuggerAddress", debuggerAddress)# C:\\chromedriver\\129.0.6656.0\\chromedriver.exeservice = ChromeService(executable_path = 驱动路径)# 创建一个新的Edge浏览器实例,并启用无痕模式driver = webdriver.Chrome(service = service, options = options)return driver# 如果你只需要确认元素存在,但不立即与其交互,那么可以使用 presence_of_element_located。# 如果你需要确保元素不仅存在而且可以安全地被用户交互(如点击),则应使用 element_to_be_clickableclass 页面元素:@staticmethoddef 判断元素是否存在(driver, 标签, 内容, 超时时间):element = SeleniumUtil.页面元素.获取元素(driver, 标签, 内容, 超时时间)if element is not None:return Trueelse:return False@staticmethoddef 点击元素(元素):if 元素 is not None:元素.click()return Trueelse:return False@staticmethoddef get元素(driver, 需要交互, 类型, 值, 超时时间):if 超时时间 is None:超时时间 = 7if 需要交互 is None:需要交互 = Truetry:wait = WebDriverWait(driver, 超时时间)if 需要交互:元素 = wait.until(EC.element_to_be_clickable((类型, 值)))if 元素 is not None:return 元素else:return driver.find_element(类型, 值)else:元素 = wait.until(EC.presence_of_element_located((类型, 值)))if 元素 is not None:return 元素else:return driver.find_element(类型, 值)except Exception as e:try:return driver.find_element(类型, 值)except Exception as e2:time.sleep(0)return None@staticmethoddef get元素ById(driver, id, 需要交互, 超时时间):return SeleniumUtil.页面元素.get元素(driver, 需要交互, By.ID, id, 超时时间)@staticmethoddef get元素By标签及内容(driver, 标签, 内容, 需要交互, 超时时间):return SeleniumUtil.页面元素.get元素(driver, 需要交互, By.XPATH, f"//{标签}[text()='{内容}']", 超时时间)@staticmethoddef get元素ByName属性(driver, name, 需要交互, 超时时间):return SeleniumUtil.页面元素.get元素(driver, 需要交互, By.NAME, name, 超时时间)@staticmethoddef get元素By标签及属性(driver, 标签, 属性, 属性值, 需要交互, 超时时间):return SeleniumUtil.页面元素.get元素(driver, 需要交互, By.CSS_SELECTOR, f'{标签}[{属性}="{属性值}"]', 超时时间)@staticmethoddef get元素By标签及属性立即(driver, 标签, 属性, 属性值, 需要交互, 超时时间):值 = f'{标签}[{属性}="{属性值}"]'print(值)return driver.find_element(By.CSS_SELECTOR, 值)## @staticmethod# def 获取元素通过标签及属性(driver, 标签, 属性, 属性值):# try:# element = driver.find_element(By.CSS_SELECTOR, f'{标签}[{属性}="{属性值}"]')# return element# except Exception as e:# time.sleep(0)# return Noneclass 扩展程序:@staticmethoddef 打开扩展程序页(driver):driver.get('chrome://extensions')@staticmethoddef 查询开发者模式状态(driver):# 打开目标网页SeleniumUtil.扩展程序.打开扩展程序页(driver)# 使用WebDriverWait等待页面加载完成,代替固定等待时间# time.sleep(5)try:wait = WebDriverWait(driver, 5)time.sleep(1)js = """// window.location.href = 'chrome://extensions'//获取开发者模式状态let flag = document.querySelector("body > extensions-manager").shadowRoot.querySelector("#toolbar").shadowRoot.querySelector("#devMode").getAttribute("aria-pressed");if(flag === 'true'){return true;}else{return false;}"""status = driver.execute_script(js)print(f"当前开发者模式状态-{status}")return statusexcept Exception as e:time.sleep(0)@staticmethoddef 切换开发者模式状态(driver):try:wait = WebDriverWait(driver, 7)time.sleep(1)js = """document.querySelector("body > extensions-manager").shadowRoot.querySelector("#toolbar").shadowRoot.querySelector("#devMode").click();return true;"""driver.execute_script(js)except Exception as e:time.sleep(0)@staticmethoddef 打开开发者模式(driver):SeleniumUtil.扩展程序.修改开发者模式状态(driver, True)@staticmethoddef 修改开发者模式状态(driver, flag):# 打开目标网页SeleniumUtil.扩展程序.打开扩展程序页(driver)# 使用WebDriverWait等待页面加载完成,代替固定等待时间from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC开发者模式状态 = SeleniumUtil.扩展程序.查询开发者模式状态(driver)if 开发者模式状态 == flag:time.sleep(0)else:SeleniumUtil.扩展程序.切换开发者模式状态(driver)print(f"修改开发者模式状态-{flag}")
相关文章:
【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等
【自动化】Python SeleniumUtil 工具 【Python】使用Selenium 操作浏览器 自动化测试 记录-CSDN博客文章浏览阅读58次。文章浏览阅读42次。【附件】Selenium chromedriver 驱动及浏览器下载。【附件】Selenium chromedriver 驱动及浏览器下载-CSDN博客。3.安装Chrome浏览器驱动…...
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
🗺️博客地图 📍方法一、timedatectl 命令 📍方法二、手动链接 /etc/localtime 📍方法三、修改时区变量 在 Linux 系统中,可以通过以下3种方式将系统时区修改为 CST(中国标准时间,GMT8 或称 …...

android:sharedUserId 应用进程声明介绍
背景 adb install 安装系统软件报错,原因是签名不一致,进程改变。 代码分析 AndroidManifest.xml 定义的 android:sharedUserId 应用归属进程不同,从phone切换到system。 初始配置 <manifest xmlns:android="http://schemas.android.com/apk/res/android"c…...

解锁ApplicationContext vs BeanFactory: 谁更具选择性?
目录 一、聚焦源码回顾 (一)源码分析和理解 (二)简短的回顾对比建议 二、ApplicationContext vs BeanFactory特性对比 (一)主要特性总结 (二)直接建议 三、案例简单说明 &am…...
一篇梳理清楚http请求知识点
HTTP请求是Web开发中的重要组成部分,它涉及到客户端和服务器之间的通信。掌握HTTP请求的知识点对于前端开发和后端开发都至关重要。以下是关于HTTP请求的详细梳理,结合代码进行说明。 1. HTTP请求概述 HTTP(超文本传输协议)是一个…...

Kotlin - 协程结构化并发Structured Concurrency
前言 Kotlin的Project Lead,Roman Elizarov的一片文章https://elizarov.medium.com/structured-concurrency-722d765aa952介绍了Structured Concurrency发展的背景。相对Kotlin1.1时代,后来新增的Structured Concurrency理念,也就是我们现在所…...

新版国标GB28181设备端Android版EasyGBD支持国标GB28181-2022,支持语音对讲,支持位置上报,开源在Github
经过近3个月的迭代开发,新版本的国标GB28181设备端EasyGBD安卓Android版终于在昨天发布到Github了,最新的EasyGBD支持了国标GB28181-2022版,还支持了语音对讲、位置上报、本地录像等功能,比原有GB28181-2016版的EasyGBD更加高效、…...

豆包MarsCode测评:编程效率再提升
豆包MarsCode测评:编程效率再提升 本文正在参与豆包MarsCode AI 编程体验家活动 随着人工智能技术的发展,编程的方式也在悄然发生变化。最近,豆包推出的 AI 编程工具 MarsCode 在开发者社区引发了不小的关注。这是一款支持多种主流编程语言…...

二叉树 -- 堆(详解)
目录 1、堆的概念及结构 2、堆的实现(附代码) 2.1、向下调整算法建堆 3、堆的应用(附代码) 3.1、堆排序 3.2、TOP-K问题 1、堆的概念及结构 如果有一个关键码的集合K { k0,k1 ,k2 ,…,k(n-1) },把它的所有元素…...
【Apache Paimon】-- 11 -- Flink 消费 kakfa 写 S3 File
目录 1、项目构建 2、项目新增和修改 2.1 pom.xml 新增依赖 2.2 本地测试或者 flink on k8s 时,新增 S3FileSystemFactory.java 第一步:创建包=org.apache.flink.fs.s3hadoop 第二步:新增 java 类 S3FileSystemFactory 特别注意 (1)本地测试时需要新增以下内容 (…...
SQL MID()
SQL中的MID()函数是一个用于从指定位置开始截取字符串中指定长度的子串的函数。这个函数在数据库查询和数据处理中经常被使用,特别是在需要从较长的文本字段中提取特定信息时。 MID()函数的基本语法是:SELECT MID(column_name, start, length) FROM tab…...
jsp | servlet | spring forEach读取不了对象List
导致这个问题的原因有很多的,这里讲到的只是原因之一 原因 taglib不认识forEach 解决办法 添加<% taglib uri"http://java.sun.com/jsp/jstl/core" prefix"c" %> (我忘写这个东西了哈哈哈)...

【ArcGIS Pro微课1000例】0063:处理无人机数据(空三、生成DOM、DSM、DTM)
使用ArcGIS Pro 正射拼接处理无人机数据流程化工具,不需要额外产品许可的支持,只需要桌面是高级版许可即可支持。ArcGIS Pro处理无人机摄影测量数据主要内容有:空三、生成DOM、DSM、DTM。 文章目录 一、创建映射项目二、提交自由空三三、添加控制点优化四、提交产品生产一、…...

【pytorch】深度学习计算
1 层和块 块由类(class)表示。它的任何子类都必须定义一个将其输入转换为输出的前向传播函数,并且必须存储任何必需的参数。注意,有些块不需要任何参数。最后,为了计算梯度,块必须具有反向传播函数。 1.1…...

详解磁盘IO、网络IO、零拷贝IO、BIO、NIO、AIO、IO多路复用(select、poll、epoll)
1、什么是I/O 在计算机操作系统中,所谓的I/O就是输入(Input)和输出(Output),也可以理解为读(Read)和写(Write),针对不同的对象,I/O模式可以划分为…...

VPN技术-GRE隧道的配置
GRE隧道的配置 1, 在AR1上配置DHCP接口地址池,AR3上配置DHCP全局地址池 2, PC1获取的IP地址为10.10.10.253,PC2获取的IP地址为10.10.30.253 3,通过ip route-static将目的地址为10.10.30.253的流量引入到Tunnel #配…...

【spring-cloud-gateway总结】
文章目录 什么是gateway如何导入gateway依赖路由配置gateway配置断路器导包配置 什么是gateway 在微服务架构中,gateway网关是一个服务,它作为系统的唯一入口点,处理所有的客户端请求,然后将这些请求路由到适当的服务。提供了几个…...
数组相关简单算法
目录 1. 数据结构与算法 2. 数组中涉及的算法 2.1 2.2 数值型数组相关运算 2.3 数组赋值 2.4 数组复制/反转 2.5 数组查找 2.6 排序 1. 数据结构与算法 《数据结构与算法》是大学些许专业的必修或选修课,主要包含两方面知识: (1&#…...

在VBA中结合正则表达式和查找功能给文档添加交叉连接
在VBA中搜索文本有两种方式可用,一种是利用Range.Find对象(更常见的形式可能是Selection.Find,Selection是Range的子类,Selection.Find其实就是特殊的Range.Find),另一种方法是利用正则表达式,但…...

动手学深度学习-多层感知机-7前向传播、反向传播和计算图
目录 前向传播 前向传播计算图 反向传播 训练神经网络 小结 我们已经学习了如何用小批量随机梯度下降训练模型。 然而当实现该算法时,我们只考虑了通过前向传播(forward propagation)所涉及的计算。 在计算梯度时,我们只调用…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...