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

news2024/9/21 14:45:41

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.BoundingRectangle

    print(close_location)


    while True:
        moment_list=get_moment_list(moment)
        moment_bottom=moment.BoundingRectangle
        print(moment_bottom)

        for friend in moment_list:
            friend_bottom=friend.BoundingRectangle
            print(friend_bottom)
            print(friend.Name)
            try:
                if friend_bottom.bottom<40:
                    pass
                else:

                    friend.ButtonControl(Name="评论").Click()    # 点击评论按钮,目的是为了显示出点赞按钮

                    moment.ButtonControl(Name="取消").Click()       # 点击赞按钮

                    print("点赞成功")
            except:
                print("点赞失败")
            finally:
                y=friend.BoundingRectangle.bottom
                print(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的入侵检测:基于机器学习,学习大量的正确的数据包和请求,一旦发现某个数据包与某个学习过的匹配度很低,则可疑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1973280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

声音和数据之间的调制解调 —— 电报机和电传打字机如何影响计算机的演变

注&#xff1a;机翻&#xff0c;未校对。 The Squeal of Data The through line between the telegraph and the computer is more direct than you might realize. Its influence can be seen in common technologies, like the modem. 电报和计算机之间的直通线比你想象的要…

基于IOT架构的数据采集监控平台!

LP-SCADA数据采集监控平台是蓝鹏测控推出的一款聚焦于工业领域的自动化数据采集监控系统&#xff0c; 助力数字工厂建设的统一监控平台。 为企业提供从下到上的完整的生产信息采集与集成服务&#xff0c;从而为企业综合自动化、工厂数字化及完整的"管控一体化”的解决方案…

LockSupport详解

文章目录 理解可重入锁LockSupport线程等待唤醒机制&#xff08;wait/notify&#xff09; waitNotify限制awaitSignal限制LockSupport重点说明 理解可重入锁 可重入锁的种类&#xff1a; 隐式锁&#xff08;即synchronized关键字使用的锁&#xff09;默认是可重入锁。 同步代…

站在临床数据科学的角度,药物试验归根结底是这两大假设

在临床数据科学的领域中&#xff0c;药物试验的设计和实施是评估药物效果及其安全性的关键环节。药物试验的基础无外乎两大核心假设&#xff1a;有效性与安全性。这两个假设不仅是药物试验的起点&#xff0c;也是整个研究过程中的重要指导原则。 药物试验的核心主旨在于对待测试…

Python高性能计算:进程、线程、协程、并发、并行、同步、异步

这里写目录标题 进程、线程、协程并发、并行同步、异步I/O密集型任务、CPU密集型任务 进程、线程、协程 进程、线程和协程是计算机程序执行的三种不同方式&#xff0c;它们在资源管理、执行模型和调度机制上有显著的区别。以下是对它们的详细解释和比较&#xff1a; 进程&…

一款有趣的工具,锁定鼠标键盘,绿色免安装

这是一款完全免费的程序&#xff0c;可以实现在不锁定屏幕的情况下锁定鼠标键盘&#xff0c;让鼠标键盘无法操作。比较适合防止误碰鼠标键盘&#xff0c;以及离开电脑时不希望别人操作自己的电脑。 ★★★★★锁定鼠标键盘工具&#xff1a;https://pan.quark.cn/s/e5c518a2165…

路由配置修改(五)

一、默认约定式路由 1、umi 会根据 pages 目录自动生成路由配置。 * name umi 的路由配置* description 只支持 path,component,routes,redirect,wrappers,name,icon 的配置* param path path 只支持两种占位符配置&#xff0c;第一种是动态参数 :id 的形式&#xff0c;第二种…

win11 intel新显卡控制面板无自定义分辨率选项解决

问题 下图是现在的intel显卡控制面板&#xff0c;不知道为啥变得很傻瓜式了&#xff0c;连所有显卡控制面板都有的分辨率自定义也被干掉了。 解决方式 其实解决很简单&#xff0c;因为自定义分辨率对显卡玩游戏来说还是很常用的&#xff0c;intel在beta版又加回来了&#x…

样式与特效(2)——新闻列表

1.盒子模型的边距概念 ) Margin-top 上面 Margin-bottom 底部 Margin-right 右边 Margin-left 左边 Margin : 10px &#xff08;上下左右都是10px&#xff09; Margin &#xff1a;10px,20px (上下边距10px 左右20px) CSS里面最重要的属性之一 将页面理解成…

C++ | Leetcode C++题解之第316题去除重复字母

题目&#xff1a; 题解&#xff1a; class Solution { public:string removeDuplicateLetters(string s) {vector<int> vis(26), num(26);for (char ch : s) {num[ch - a];}string stk;for (char ch : s) {if (!vis[ch - a]) {while (!stk.empty() && stk.back(…

C#值类型和引用类型,类和结构体

1、类class是引用类型&#xff0c;多个引用类型变量的值会互相影响。存储在堆&#xff08;heap&#xff09;上 2、结构体struct是值类型&#xff0c;多个值类型变量的值不会互相影响。存储在栈&#xff08;stack&#xff09;上 using System; using System.Collections.Generi…

PTA题目|象限的判断(python)

题目要求 输入一对坐标&#xff0c;输出它在直角坐标系中的象限。 输入格式: 输入坐标(x,y)&#xff0c;&#xff08;假设输入的x或y坐标值一定不会为0&#xff09;如&#xff1a;(3.5,-2)。 输出格式: 输出对应的象限&#xff0c;如&#xff1a;第四象限 输入样例: 在这…

Python | Leetcode Python题解之第315题计算右侧小于当前元素的个数

题目&#xff1a; 题解&#xff1a; import numpy as np from bisect import bisect_leftclass Solution:max_len 10000c []buckets []def countSmaller(self, nums: List[int]) -> List[int]:self.c [0 for _ in range(len(nums) 5)]counts [0 for _ in range(len(…

Sentinel-1 Level 1数据处理的详细算法定义(五)

《Sentinel-1 Level 1数据处理的详细算法定义》文档定义和描述了Sentinel-1实现的Level 1处理算法和方程,以便生成Level 1产品。这些算法适用于Sentinel-1的Stripmap、Interferometric Wide-swath (IW)、Extra-wide-swath (EW)和Wave模式。 今天介绍的内容如下: Sentinel-1 L…

前端怎么做一个验证码和JWT,使用mockjs模拟后端

流程图 创建一个发起请求 创建一个方法 getCaptchaImg() {this.$axios.get(/captcha).then(res > {console.log(res);this.loginForm.token res.data.data.tokenthis.captchaImg res.data.data.captchaImgconsole.log(this.captchaImg)})}, captchaImg: "", 创…

钡铼技术M12双通道防水分线盒稳定可靠

钡铼技术的DB系列M12双通道防水分线盒是一款专为工业自动化环境设计的高性能产品。其采用耐酸碱腐蚀材料制成的壳体&#xff0c;能够达到IP67防护等级&#xff0c;并通过灌胶工艺进一步提升到IP69K防护等级&#xff0c;确保在恶劣的工业条件下仍然能稳定可靠地运行。 技术特点…

小怡分享之Java的继承和多态

前言&#xff1a; &#x1f308;✨小怡给大家分享了Java的类和对象&#xff0c;今天小怡给大家分享的是继承和多态。 1.继承 1.1 为什么需要继承 Java中使用类对现实世界中实体来进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;则可以用来表示现实中的实体&…

无人机之环境监测篇

无人机在各个领域的应用越来越广泛&#xff0c;环境监测便是其中之一&#xff0c;它们能够提供高效、安全、经济的监测手段&#xff0c;帮助科学家和管理者更好的理解环境状况并采取相应措施。 一、污染监测 无人机可以搭载各种传感器&#xff0c;如气体检测器、红外热像仪等&…

Map遍历 32

package Array.collection;import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.function.BiConsumer;public class map1 {public static void main(String[] args) {Map<String, Double> anew HashMap<>();a.put("合法…

图论进阶之路-最短路(Floyd)

时间复杂度&#xff1a;O(n^3) 使用场景&#xff1a;当需要得知任意两个点的最短距离以及其路径时使用 准备&#xff1a;需要两个矩阵 一个记录最短距离&#xff08;D&#xff09; 一个记录最短路径的最后一个结点&#xff08;P&#xff09; 其核心在于不断的判断越过中间…