【自动化测试】使用Python selenium类库模拟手人工操作网页
使用Python selenium类库模拟手人工操作网页
- 背景
- 准备工作
- 安装Python版本
- 安装selenium类库
- 下载selenium驱动
- 配置本地环境变量
- 自动化脚本输出
- 页面表单自动化填充相关代码
背景
- 待操作网页必须使用IE浏览器登录访问
- 用户本地只有edge浏览器,通过edge浏览器IE模式访问指定网页
验证结论:
selenium不支持通过edge浏览器IE模式控制网页。
目的:
通过本次实践,本文详细描述selenium使用过程,如环境配置方法以及基础网页表单填充,按钮点击等操作。
准备工作
安装Python版本
python官网下载python版本,推荐稳定发布版本,如python 3.13.2
安装selenium类库
打开本地cmd窗口,执行以下命令下载selenium类库
pip install selenium
查看selenium Python类库官方文档,各版本功能介绍等。
下载selenium驱动
chrome,edge,Firefox等高级浏览器驱动在selenium官网获取,IE浏览器驱动可以下载附件,包含32位和64位版本。
配置本地环境变量
为保证Python脚本正常读取webDriver驱动文件,须配置环境变量,对应值为驱动所在目录。

自动化脚本输出
python脚本运行自动初始化打开浏览器,相关代码如下。
注意:只能重新打开浏览器,不能基于已打开网页操作,各位酌情选择。
def init_driver(logger, browser_name, url):options = Options()# 脚本运行完不关闭网页options.add_experimental_option("detach", True)# 禁用扩展options.add_experimental_option('useAutomationExtension', False)# 添加agent头,绕过IE浏览器检查options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36')if browser_name == 'IE':# 继承个人主机配置,保留IE模式打开edge浏览器能力# options.add_argument(# "--user-data-dir=C:\\Users\\杨鹏\\AppData\\Local\\Microsoft\\Edge\\User Data") # 替换为你的实际用户数据目录路径options.add_argument("--profile-directory=Default") # 使用默认配置文件driver = webdriver.Ie(options=options)elif browser_name == 'Edge':options.use_chromium = True # Ensure we are using the Chromium-based Edgeoptions.add_experimental_option("excludeSwitches", ["enable-automation"]) # 避免 WebDriver 检测driver = webdriver.Edge(options=options)else:logger.error("Unsupported browser. Use 'IE' or 'Edge'.")raise ValueError("Unsupported browser. Use 'IE' or 'Edge'.")return driver
页面表单自动化填充相关代码
通过页面元素id等关键信息,定位页面元素,自动填充,包括文本框或者下拉列表选择。
def login(driver, url, username, password, user_phone):driver.get(url)username_input = driver.find_element(By.ID, 'tbUploadEndDate5')username_input.send_keys(username)password_input = driver.find_element(By.ID, 'tbUploadEndDate22')password_input.send_keys(password)# 图片验证码validate_code_input = driver.find_element(By.ID, 'validateCode')validate_code = input("请输入自动打开页面上的验证码计算结果: ")validate_code_input.send_keys(validate_code)# 找到手机号下拉列表元素user_phone_select_input = driver.find_element(By.ID, "userPhone") # 使用适当的定位器# 创建Select对象user_phone_select = Select(user_phone_select_input)# 根据文本选择选项user_phone_select.select_by_visible_text(user_phone)# 短信验证码发送verification_code_input = driver.find_element(By.ID, 'verificationCode')send_msg_button = driver.find_element(By.ID, 'sendBtn')# send_msg_button.click()verification_code = input("请输入您收到的短信验证码: ")# 短信验证码verification_code_input.send_keys(verification_code)login_img = driver.find_element(By.XPATH, "//td/img[@onclick='javascript:submitform();']")login_img.click()# 等待登录成功(可以根据实际情况调整等待条件)WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.ID, 'some_element_after_login')))
相关文章:
【自动化测试】使用Python selenium类库模拟手人工操作网页
使用Python selenium类库模拟手人工操作网页 背景准备工作安装Python版本安装selenium类库下载selenium驱动配置本地环境变量 自动化脚本输出页面表单自动化填充相关代码 背景 待操作网页必须使用IE浏览器登录访问用户本地只有edge浏览器,通过edge浏览器IE模式访问…...
【Apache Paimon】-- 15 -- 利用 paimon-flink-action 同步 postgresql 表数据
利用 Paimon Schema Evolution 核心特性同步变更的 postgresql 表结构和数据 1、背景信息 在Paimon 诞生以前,若 mysql/pg 等数据源的表结构发生变化时,我们有几种处理方式 (1)人工消息通知,然后手动同步到数据仓库中(2)使用 flink 消费 DDL binlog ,然后自动更新 Hi…...
PostgreSql-COALESCE函数、NULLIF函数、NVL函数使用
COALESCE函数 COALESCE函数是返回参数中的第一个非null的值,它要求参数中至少有一个是非null的; select coalesce(1,null,2),coalesce(null,2,1),coalesce(null,null,null); NULLIF(ex1,ex2)函数 如果ex1与ex2相等则返回Null,不相等返回第一个表达式的值…...
springboot+vue导入ruoyi项目的框架
一、介绍 RuoYi-Vue版本,采用了前后端分离的单体架构设计软件环境:JDK、Mysql、Redis、Maven、Node技术选型: Spring Boot、Spring Security、MyBatis、Jwt、Vue3、Element-Plus官方地址: https://gitee.com/y_project/RuoYi-Vue 官方推荐的版本如下&a…...
金蛇祈福,鸿运开年!广州白云皮具城2025开市大吉!
锣鼓一响,黄金万两!2月6日大年初九,广州白云皮具城举行盛大的醒狮开市仪式!象征吉祥如意的醒狮,将好运、财运传递给全体商户和八方来客。 醒狮点睛 金鼓一响黄金万两,十头醒狮登台,董事总经理刘…...
DeepSeek本地化部署
文章目录 前言一、主机配置二、工具下载Ollama下载安装退出Ollama下载DeepSeek R1模型下载安装ChatBox实现可视化交互ChatBox设置模型 前言 最近的国产大模型DeepSeek横空出事,笔者也关注了下。网页版的免费而且推理速度很快,重量级的是它把自己详细的推…...
MoviePy,利用Python自动剪辑tiktok视频
Python剪辑视频是非常强大的,而且能流水线批量操作,可以使用MoviePy库实现。 最近看到一个Github项目,作者利用Python写了一个自动生成tiktok视频的脚本,受到热捧。 现在像抖音、tiktok上有很多流水线生产的视频,不少…...
ubuntu20.04+RTX4060Ti大模型环境安装
装显卡驱动 这里是重点,因为我是跑深度学习的,要用CUDA,所以必须得装官方的驱动,Ubuntu的附件驱动可能不太行. 进入官网https://www.nvidia.cn/geforce/drivers/,选择类型,最新版本下载。 挨个运行&#…...
2024~2025学年佛山市普通高中教学质量检测(一)【高三数学】
一、选择题 本题共8小题,每小题5分,共40分。在每小题给出的四个选项中。只有一项是符合题目要求的。 1、若 5 z 2 i 1 \frac{5}{z}2i1 z52i1,则 z z z A. 1-2i B. 12i C. 2-i D. 2i2、已知集合 A { x ∣ 1 < x < a } A\left\{…...
管理etcd的存储空间配额
如何管理etcd的存储空间配额 - 防止集群存储耗尽指南 本文基于etcd v3.4官方文档编写 为什么需要空间配额? 在分布式系统中,etcd作为可靠的键值存储,很容易成为系统瓶颈。当遇到以下情况时: 应用程序频繁写入大量数据未及时清理…...
备战蓝桥杯-洛谷
今天打算写一些洛谷上面的题目 P10904 [蓝桥杯 2024 省 C] 挖矿 https://www.luogu.com.cn/problem/P10904 看了大佬写的题解才写出来这道题的:题解:P10904 [蓝桥杯 2024 省 C] 挖矿 - 洛谷专栏 思路: 这是一道贪心的题目,用…...
在线免费 HTML 预览导出为图片,并且支持水平切割
在线体验 作用:可以直接预览 html 的页面效果,导出为图片,支持指定切割的数量,等高水平切割。 https://houbb.github.io/tools/html-preview.html 创作背景 有时候希望给一段 html 导出为长度,或者水平切分ÿ…...
洛谷题目: P2996 [USACO10NOV] Visiting Cows G 题解
题目传送门: P2996 [USACO10NOV] Visiting Cows G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 前言: 本题的核心问题是在一棵由奶牛(节点)和道路(边)构成的树状结构中,根据 “不能同时拜…...
告别手动操作!用Ansible user模块高效管理 Linux账户
在企业运维环境中,服务器的用户管理是一项基础但非常重要的任务。比如,当有新员工加入时,我们需要在多台服务器上为他们创建账户并分配合适的权限。而当员工离职或岗位发生变化时,我们也需要迅速禁用或删除他们的账户,…...
java 8 在 idea 无法创建 java spring boot 项目的 变通解决办法
java 8 在 idea 无法创建 java spring boot 项目的 变通解决办法 spring boot 3 官方强制 要用 java 17 ,但是 不想安装java 17的 ,但是又想 使用 spring boot ,可以这样 : 在这个网站 https://start.aliyun.com/ 选择 你相对…...
javaEE初阶————多线程初阶(3)
大家新年快乐呀,今天是第三期啦,大家前几期的内容掌握的怎么样啦? 1,线程死锁 1.1 构成死锁的场景 a)一个线程一把锁 这个在java中是不会发生的,因为我们之前讲的可重入机制,在其他语言中可…...
eggnog后kegg结果提取和注释
首先进入KEGG BRITE: KEGG Orthology (KO) 下载json文件 用python处理一下 import json import re import osos.chdir("C:/Users/fordata/Downloads/") with open("ko00001.json","r") as f:fj f.read()kojson json.loads(fj)with open(&qu…...
shell脚本控制——处理信号
Linux利用信号与系统中的进程进行通信。你可以通过对脚本进行编程,使其在收到特定信号时执行某些命令,从而控制shell脚本的操作。 1.重温Linux信号 Linux系统和应用程序可以产生超过30个信号。下表列出了在shell脚本编程时会遇到的最常见的Linux系统信…...
Doris更新某一列数据完整教程
在Doris,要更新数据,并不像mysql等关系型数据库那样方便,可以用update set来直接更新某个列。在Doris只能进行有限的更新,官方文档如下: UPDATE - Apache Doris 1、使用Doris自带的Update功能 描述 该语句是为进行对数据进行更新的操作,UPDATE 语句目前仅支持 UNIQUE…...
VIVADO生成DCP和EDF指南
VIVADO生成DCP和EDF 文章目录 VIVADO生成DCP和EDF前言一、DCP封装二、EDF封装 前言 详细步骤就不贴图了,网上一大堆 在Vivado中,常用的三种封装形式有三种: ● IP ● edif ● dcp 在下文之前,先看几个概念 out_of_context&…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
