当前位置: 首页 > news >正文

【自动化】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: 谁更具选择性?

目录 一、聚焦源码回顾 &#xff08;一&#xff09;源码分析和理解 &#xff08;二&#xff09;简短的回顾对比建议 二、ApplicationContext vs BeanFactory特性对比 &#xff08;一&#xff09;主要特性总结 &#xff08;二&#xff09;直接建议 三、案例简单说明 &am…...

一篇梳理清楚http请求知识点

HTTP请求是Web开发中的重要组成部分&#xff0c;它涉及到客户端和服务器之间的通信。掌握HTTP请求的知识点对于前端开发和后端开发都至关重要。以下是关于HTTP请求的详细梳理&#xff0c;结合代码进行说明。 1. HTTP请求概述 HTTP&#xff08;超文本传输协议&#xff09;是一个…...

Kotlin - 协程结构化并发Structured Concurrency

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

新版国标GB28181设备端Android版EasyGBD支持国标GB28181-2022,支持语音对讲,支持位置上报,开源在Github

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

豆包MarsCode测评:编程效率再提升

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

二叉树 -- 堆(详解)

目录 1、堆的概念及结构 2、堆的实现(附代码) 2.1、向下调整算法建堆 3、堆的应用(附代码) 3.1、堆排序 3.2、TOP-K问题 1、堆的概念及结构 如果有一个关键码的集合K { k0&#xff0c;k1 &#xff0c;k2 &#xff0c;…&#xff0c;k(n-1) }&#xff0c;把它的所有元素…...

【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()函数是一个用于从指定位置开始截取字符串中指定长度的子串的函数。这个函数在数据库查询和数据处理中经常被使用&#xff0c;特别是在需要从较长的文本字段中提取特定信息时。 MID()函数的基本语法是&#xff1a;SELECT MID(column_name, start, length) FROM tab…...

jsp | servlet | spring forEach读取不了对象List

导致这个问题的原因有很多的&#xff0c;这里讲到的只是原因之一 原因 taglib不认识forEach 解决办法 添加<% taglib uri"http://java.sun.com/jsp/jstl/core" prefix"c" %> &#xff08;我忘写这个东西了哈哈哈&#xff09;...

【ArcGIS Pro微课1000例】0063:处理无人机数据(空三、生成DOM、DSM、DTM)

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

【pytorch】深度学习计算

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

详解磁盘IO、网络IO、零拷贝IO、BIO、NIO、AIO、IO多路复用(select、poll、epoll)

1、什么是I/O 在计算机操作系统中&#xff0c;所谓的I/O就是输入&#xff08;Input&#xff09;和输出&#xff08;Output&#xff09;&#xff0c;也可以理解为读&#xff08;Read&#xff09;和写&#xff08;Write)&#xff0c;针对不同的对象&#xff0c;I/O模式可以划分为…...

VPN技术-GRE隧道的配置

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

【spring-cloud-gateway总结】

文章目录 什么是gateway如何导入gateway依赖路由配置gateway配置断路器导包配置 什么是gateway 在微服务架构中&#xff0c;gateway网关是一个服务&#xff0c;它作为系统的唯一入口点&#xff0c;处理所有的客户端请求&#xff0c;然后将这些请求路由到适当的服务。提供了几个…...

数组相关简单算法

目录 1. 数据结构与算法 2. 数组中涉及的算法 2.1 2.2 数值型数组相关运算 2.3 数组赋值 2.4 数组复制/反转 2.5 数组查找 2.6 排序 1. 数据结构与算法 《数据结构与算法》是大学些许专业的必修或选修课&#xff0c;主要包含两方面知识&#xff1a; &#xff08;1&#…...

在VBA中结合正则表达式和查找功能给文档添加交叉连接

在VBA中搜索文本有两种方式可用&#xff0c;一种是利用Range.Find对象&#xff08;更常见的形式可能是Selection.Find&#xff0c;Selection是Range的子类&#xff0c;Selection.Find其实就是特殊的Range.Find&#xff09;&#xff0c;另一种方法是利用正则表达式&#xff0c;但…...

动手学深度学习-多层感知机-7前向传播、反向传播和计算图

目录 前向传播 前向传播计算图 反向传播 训练神经网络 小结 我们已经学习了如何用小批量随机梯度下降训练模型。 然而当实现该算法时&#xff0c;我们只考虑了通过前向传播&#xff08;forward propagation&#xff09;所涉及的计算。 在计算梯度时&#xff0c;我们只调用…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...