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

基于Selenium实现操作网页及操作windows桌面应用

Selenium操作Web页面

Why?

  1. 通常情况下,网络安全相关领域,更多是偏重于协议和通信。
  2. 但是,如果协议通信过程被加密或者无法了解其协议构成,是无法直接通过协议进行处理。此时,可以考虑模拟UI操作,进而实现相对应的部分功能。

原理

  1. 运行被操作的程序,使其界面出现
  2. 找到被操作的界面元素
    1. 基于元素的特征进行识别
    2. 图像识别和对比
    3. opencv
  3. 对其进行操作:输入、单击、右键等
  4. 对操作后的结果进行验证,确认操作是成功的
  5. Selenium Webdriver的通信机制:Python模拟客户端发送HTTP请求给WebDriver,WebDriver再驱动浏览器去执行

基于Selenium实现dvwa_ui

问题:

  1. 运行代码后打开网页闪退
  2. 解决方法:
    1. selenium版本回退到4.1.1
pip uninstall selenium			# 卸载已安装版本
pip install selenium==4.1.1		# 安装指定版本

tips:

  1. 如果要操作windows元素,则可以使用库uiautomation
  2. 如果要处理移动端,可以使用库Appium-Python-Client
  3. scapy,比socket更加底层的框架
from selenium import webdriver
import time
# 第一步,先实例化webdriver对象,用于初始化浏览器操作
# 默认情况下,建议将chromedriver.exe等放在PATH环境变量的某个目录中,否则需要在参数中指定execute_path='C:/xxx/xxx.exe'
# driver = webdriver.Chrome(executable_path='C:/chromedriver.exe')
driver = webdriver.Chrome()
# 使用火狐
# driver=webdriver.Firefox()
# 最大化浏览器窗口
driver.maximize_window()
time.sleep(2)
# 打印网页标题
print(driver.title)
# 打印网页源码
print(driver.page_source)
# 刷新
driver.refresh()
# 后退
driver.back()
# 前进
driver.forward()
# 获取对应的所有cookie
driver.get_cookies()
# 添加cookie
# 关闭浏览器窗口# 访问目标网站的页面地址
url="http://www.myfsec.com/login.php"
driver.get(url)# 第二步:利用DOM的识别机制,去识别和操作页面元素
# 旧方法,将弃用
# driver.find_element_by_name('username').send_keys('admin')
# driver.find_element_by_name('password').send_keys('password')driver.find_element('name','username').send_keys('admin')
driver.find_element('name','password').send_keys('password')# 将弃用
# 根据xpath与css选择器定位元素
# driver.find_element_by_xpath("//input[@id='verifycode']").secd_keys('0000')
# driver.find_element_by_xpath('//*[@id="content"]/form/fieldset/p/input').click()
# driver.find_element_by_css_selector("#content > form > fieldset > p > input[type=submit]")
# 推荐使用
# driver.find_element('xpath',"//*[@id='content']/form/fieldset/p/input").click()
driver.find_element('css selector',"#content > form > fieldset > p > input[type=submit]").click()
# # 打印网页标题
# print(driver.title)
# # 打印网页源码
# print(driver.page_source)# 判断是否登陆成功,可以看网页中的某个元素是否存在
try:driver.find_element("id","main_body")print("登陆成功")
except:print("登陆失败")# 或者
if "Welcome to Damn Vulnerable Web Application!" in driver.page_source:print("登陆成功")
else:print("登陆失败")
driver.close()

chromdriver驱动下载:(谷歌)

  1. 114之前版本:
    1. chromedriver.storage.googleapis.com/index.html
  2. 125以后版本
    1. Chrome for Testing availability (googlechromelabs.github.io)

geckodriver驱动下载(火狐)

发布 ·Mozilla/GeckoDriver (github.com)

补充,selenium操作windows–UIAutomation

其实使用selenium操作windows窗口最主要的的是像浏览器的F12一样,识别他的布局结构,从而获取相应的元素进行操作,因此我们需要用到一个工具:UISpy

在这里插入图片描述

例如:驱动windows下的wechat

在这里插入图片描述

import uiautomation,time
def get_moment_list(moment):moment_list=moment.ListControl(Name="朋友圈").GetChildren()# 获取朋友圈列表,目前只能获取看到的前几条,后面的需要滚动条滚动才能获取,滚动还没实现return moment_list
# 定位到朋友圈框
def locate_wechat_moment():wechat=uiautomation.WindowControl(Name="微信")        # 加载微信框wechat.ButtonControl(Name="朋友圈").Click()            # 点击朋友圈按钮# time.sleep(1)                                           # 等待1秒moment=uiautomation.WindowControl(Name="朋友圈")        # 加载朋友圈框moment.ButtonControl(Name="刷新").Click()              # 点击刷新按钮moment_list=get_moment_list(moment)[1:]print(len(moment_list))moment.WheelDown(wheelTimes=12, interval=0.1, waitTime=0.5)close_moment_btn=moment.ButtonControl(Name="关闭")close_location=close_moment_btn.BoundingRectangleprint(close_location)while True:moment_list=get_moment_list(moment)moment_bottom=moment.BoundingRectangleprint(moment_bottom)for friend in moment_list:friend_bottom=friend.BoundingRectangleprint(friend_bottom)print(friend.Name)try:if friend_bottom.bottom<40:passelse:friend.ButtonControl(Name="评论").Click()    # 点击评论按钮,目的是为了显示出点赞按钮moment.ButtonControl(Name="取消").Click()       # 点击赞按钮print("点赞成功")except:print("点赞失败")finally:y=friend.BoundingRectangle.bottomprint(y)moment_list=get_moment_list(moment)moment.WheelDown(wheelTimes=y//20, interval=0.1, waitTime=0.5)if __name__ == '__main__':locate_wechat_moment()

验证码问题

  1. 短信验证码:用自己的手机获取验证码,然后用Python直接操作手机端提取验证码,进而实现自动化操作的目的。
  2. 图像验证码:静态和动态,静态的图片验证码,在没有AI之前利用打码平台进行识别或人工智能训练集进行处理,而对于动态类型验证码,比如图像滑动
  3. 机器学习
    1. 可处理的类型:文字、图片、视频、语音
    2. 怎么进行学习?CNN:卷积神经网络
      1. 安装库tensorflow.keras.models…
    3. 学习数据必须要有正确的标记:图片和正确答案,
    4. 网络安全的AI应用:入侵检测,
      1. 传统的入侵检测:基于特征,某个流量或请求存在一些可以的特征时,进行预警或防护
      2. 基于AI的入侵检测:基于机器学习,学习大量的正确的数据包和请求,一旦发现某个数据包与某个学习过的匹配度很低,则可疑

相关文章:

基于Selenium实现操作网页及操作windows桌面应用

Selenium操作Web页面 Why? 通常情况下&#xff0c;网络安全相关领域&#xff0c;更多是偏重于协议和通信。但是&#xff0c;如果协议通信过程被加密或者无法了解其协议构成&#xff0c;是无法直接通过协议进行处理。此时&#xff0c;可以考虑模拟UI操作&#xff0c;进而实现相…...

科普文:linux系列之操作系统内存管理简介

概叙 操作系统内存管理是计算机系统中的核心技术之一&#xff0c;页式管理、段式管理和段页式管理各有优缺点。页式管理通过固定大小的页框减少了外部碎片&#xff0c;但可能导致内部碎片&#xff1b;段式管理符合程序逻辑&#xff0c;提供了灵活的内存保护&#xff0c;但可能…...

【已解决】关于MyBatis的collection集合中只能取到一条数据的问题

一、问题 在涉及多表查询的时候&#xff0c;使用collection元素来映射集合属性时&#xff0c;出现了只能查询到一条数据的情况&#xff0c;但用sql语句在数据库中查询会有多条记录。 二、原因 如果两表联查&#xff0c;主表和明细表的主键都是id的话&#xff0c;明细表的多条…...

前端的学习-CSS(弹性布局-flex)

一&#xff1a;什么是弹性布局-Flex flex 是 Flexible Box 的缩写&#xff0c;意为"弹性布局"&#xff0c;用来为盒状模型提供最大的灵活性。 语法&#xff1a; .box{display: flex; } .box{display: inline-flex; } 注意&#xff0c;设为 Flex 布局以后&#xff0…...

vue3集成LuckySheet实现导入本地Excel进行在线编辑,以及导出功能

第一步&#xff1a;克隆或者下载下面的代码 git clone https://github.com/dream-num/Luckysheet.git第二步&#xff1a;安装依赖 npm install npm install gulp -g 第三步&#xff1a;运行 npm run dev效果如下图所示 第四步&#xff1a;打包 打包执行成功后&#xff0c;…...

【征求意见】同济大学--城镇给水厂碳排放核算与评价方法

城镇给水厂保障城镇居民正常生活&#xff0c;是社会经济良性发展的重要基础性设施&#xff0c;对于我国双碳战略目标的实现至关重要。 随着城镇化的发展&#xff0c;城镇供水量不断升高&#xff0c;加上 水资源与生态环境问题不断涌现&#xff0c;人们对水的安全和品质的需求日…...

【Python】后台开发返回方法和状态码类的实现

Python 后台开发中&#xff0c;获取返回的类方法&#xff0c;以及状态码类的实现 代码备份 Code - response.py """ Response class for quick generate response """ from loguru_logger import get_loggerlogger get_logger(__name__)clas…...

opencloudosV8.6和openEuler 24安装 k8s

在三台机器上部署 Kubernetes 集群 1.环境准备2.在所有节点上进行以下步骤1. 更新系统和安装必要的软件包2. 禁用交换分区3. 禁用防火墙和SElinux4.系统主机名5.设置主机名与IP地址解析6.配置内核转发及网桥过滤7. 配置 Docker Cgroup 驱动8. 添加 Kubernetes 仓库并安装 kubea…...

Tensor安装和测试

1: 打开git官方 https://github.com/NVIDIA/TensorRT 2: 下载得到&#xff1a;TensorRT-10.2.0.19.Linux.x86_64-gnu.cuda-11.8.tar.gz 3: 下载后配置环境变量&#xff0c;上面地址记得改成真实地址。 4: 如果想python使用tensorrt&#xff0c;那么 解压后目录&#xff0c…...

ELK对业务日志进行收集

ELK对业务日志进行收集 下载httpd 进到文件设置收集httpd的文件进行 设置 编辑内容 用于收集日志的内容 将日志的内容发送到实例当中 input {file{path > /etc/httpd/logs/access_logtype > "access"start_position > "beginning"}file{path &g…...

新质生产力

新质生产力”是一个相对较新的概念&#xff0c;指的是在数字化、智能化背景下&#xff0c;依托新技术、新业态、新模式&#xff0c;提升生产力质量和效率的一种生产力形态。它强调的是技术和创新对生产力的提升作用&#xff0c;尤其是在人工智能、大数据、互联网等新兴技术的推…...

《LeetCode热题100》---<5.②普通数组篇五道>

本篇博客讲解LeetCode热题100道普通数组篇中的六道题 第三道&#xff1a;轮转数组&#xff08;中等&#xff09; 第四道&#xff1a;除自身以外数组的乘积&#xff08;中等&#xff09; 第三道&#xff1a;轮转数组&#xff08;中等&#xff09; 方法一&#xff1a;使用额外的数…...

【面试题】【C语言】寻找两个正序数组的中位数

寻找两个正序数组的中位数 仅供学习 题目 算法时间复杂度 二分查找算法&#xff0c;时间复杂度为 O(log(min(m, n)))&#xff0c;其中 m 和 n 分别是两个数组的长度。 子函数 查找两个数字的最大值 int max(int a, int b) {return a > b ? a : b; }查找两个数字的最小…...

原始的原型链是怎样玩的

带着问题看代码&#xff1a; 1、原始的继承是怎样实现继承的&#xff1f; A类的prototype 属性 B类的实例 2、实现继承后&#xff0c;连B类的中实例的属性&#xff08;放在了A类的prototype中&#xff09;和原型链的上的东西都可以用 3、A.prototype.constructor实际上已经指向…...

RabbitMQ高级篇(如何保证消息的可靠性、如何确保业务的幂等性、延迟消息的概念、延迟消息的应用)

文章目录 1. 消息丢失的情况2. 生产者的可靠性2.1 生产者重连2.2 生产者确认2.3 生产者确认机制的代码实现2.4 如何看待和处理生产者的确认信息 3. 消息代理&#xff08;RabbitMQ&#xff09;的可靠性3.1 数据持久化3.2 LazyQueue&#xff08; 3.12 版本后所有队列都是 Lazy Qu…...

正点原子imx6ull-mini-Linux驱动之platform设备驱动实验(14)

我们在前面几章编写的设备驱动都非常的简单&#xff0c;都是对IO进行最简单的读写操作像I2C、 SPI、LCD 等这些复杂外设的驱动就不能这么去写了&#xff0c;Linux 系统要考虑到驱动的可重用性&#xff0c;因此提出了驱动的分离与分层这样的软件思路&#xff0c;在这个思路下诞生…...

z3基础学习

z3基础学习 ​ z3是一个微软出品的开源约束求解器&#xff0c;能够解决很多种情况下的给定部分约束条件寻求一组满足条件的解的问题。 安装&#xff1a;pip install z3-solver 1. 简单使用 from z3 import * x Int(x) #创建名为x的int类型变量 y Int(y) solve(x y10,2*x…...

开发助手专业版,有反编译等多种功能

软件介绍 开发助手能够用来快速调试应用以及查看手机软硬件相关信息&#xff0c;包括&#xff1a;快速打开或关闭开发者选项中的选项。 将原来几十秒的操作缩短为一次点击。包括显示布局边界&#xff0c;显示 GPU 过度绘制。显示布局更新。强制 GPU 渲染 显示 GPU 视图更新&a…...

嵌入式初学-C语言-十一

#接嵌入式初学-C语言-十,以及部分例题# 循环结构 break和continue break 功能&#xff1a; 1. 用在switch中&#xff0c;用来跳出switch的case语句&#xff1b;如果case没有break&#xff0c;可能会产生case穿透。 2. 用在循环中&#xff08;while、do..while、for..&#…...

浅谈几个常用OJ的注册方式

众所周知&#xff0c;好的OJ是成功的一半&#xff0c;但是有些英文OJ的注册很让人伤脑筋。 CodeForces 点进官网 戳这里 然后就会进入这个页面 在这一页里面里填写好信息即可 最后&#xff0c;一个邮件就会发到你的邮箱上&#xff0c;点击其中的链接即可激活账号 AtCoder …...

Html实现全国省市区三级联动

目录 前言 1.全国省市区的Json数据 2.找到Json数据文件(在此博文绑定资源)之后&#xff0c;放到resource目录下。 3.通过类加载器加载资源文件&#xff0c;读取Json文件 3.1 创建JsonLoader类 3.2 注入JsonLoader实体&#xff0c;解析Json文件 4.构建前端Html页面 5.通过…...

前端构建工具Webpack 与 Vite 大对比

在现代前端开发领域&#xff0c;构建工具扮演着至关重要的角色。它们不仅可以帮助我们管理项目依赖关系&#xff0c;还可以优化我们的代码&#xff0c;使其在生产环境中运行得更快更高效。其中两个最受欢迎的构建工具就是 Webpack 和 Vite。在这篇文章中&#xff0c;我们将深入…...

Ubuntu-22.04环境搭建

安装wget(一般ubuntu会自带) sudo apt-get install wget 更换国内软件源 先备份原来的/etc/apt/source.list⽂件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 防止修改错误 导致无可挽回 将下列国内镜像源 写入原来的/etc/apt/source.list⽂件&#xff08;注…...

嵌入式学习---DAY17:共用体与位运算

链表剩余的一些内容 一、共用体 union 共用体名 名称首字母大写 { 成员表列&#xff1b; }&#xff1b; union Demo {int i;short s;char c; }; int main(void) {union Demo d;d.i 10;d.s 100;d.c 200;printf("%d\n", sizeof(d)); /…...

蓝牙网关和蓝牙MESH总结

可参考&#xff1a; https://zhuanlan.zhihu.com/p/695144946 蓝牙网关 参考&#xff1a; https://www.bilibili.com/read/cv28872282/ 蓝牙网关是一种特殊的网络设备&#xff0c;它能够实现蓝牙设备与互联网或其他类型网络之间的数据传输和通信。通过蓝牙网关&#xff0c;用户…...

了解关于标准化的知识

1.标准化组织 1.1国家标准化管理委员会(Standardization Administration of the Peoples Republic of China&#xff0c;简称SAC) TC--(Technical Committee) 技术委员会. SAC/TC,就是“国家标准化管理委员会”下属的一个专项或一个行业的“技术委员会或技术小组”&a…...

【云原生】数据库忘记密码怎么办?

相信很多人都会遇到在虚拟机中忘记数据库密码的情况&#xff0c;想必大家都很苦恼&#xff0c;所以今天给大家来讲讲数据库忘记密码了如何修改密码再登录数据库&#xff01;&#xff01;&#xff01; 1、关闭数据库服务 systemctl stop mariadb 2、执行MySQL 服务器在启动时跳…...

Postman 接口测试详解

Postman 接口测试详解 Postman 接口测试详解1. Postman 基础知识1.1 什么是 Postman&#xff1f;1.2 Postman 的主要功能 2. 安装与设置2.1 安装 Postman2.2 创建 Postman 账户 3. Postman 的基本操作3.1 创建和发送请求3.2 解析响应数据3.3 使用环境和变量 4. 进阶功能4.1 编写…...

【JavaEE】线程状态

目录 前言 一.线程状态图 二.线程状态 1.初始状态(NEW) 2.运行状态(RUNNING) 3.等待状态&#xff08;WAITING) 4.超时等待&#xff08;TIMED_WAITING) 5.阻塞状态&#xff08;BLOCKED) 6.终止状态(TERMINATED) 三.线程状态间的转换 四.总结 前言 线程状态及其状态转换…...

C++笔记之编译过程和面向对象

回顾&#xff1a; “abcd”//数据类型 字符串常量 const char *p"abc"; new STU const char *//8 指针的内存空间 int float 指针的内存空间 p 指针指向的内存空间 "abc" 取决于字符串长度 指针变量的内容一级指针 指针变量的地址二级指针 …...