前言
Selenium 是支持 web 浏览器自动化的一系列工具和库的综合项目。它提供了扩展来模拟用户与浏览器的交互,用于扩展浏览器分配的分发服务器,以及用于实现 W3C WebDriver 规范 的基础结构,该规范允许为所有主要 Web 浏览器编写可交互的代码。
一、环境搭建
1. 安装Selenium py库
Pip3 install selenium
2. 安装浏览器驱动
来到官网提供的快速参考页面下载属于自己浏览器的驱动程序:
下载之后在代码中指定驱动位置:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service(executable_path="/path/to/chromedriver")
driver = webdriver.Chrome()
*左右滑动查看更多
执行成功之后会弹出浏览器:
基本命令
1. 基本命令
driver = webdriver.Chrome() #使用驱动实例开启会话
driver.get() #get请求到一个网页
title = driver.title #获取标题
driver.implicitly_wait(0.5) #建立等待策略
*左右滑动查看更多
2. 查找元素
username = driver.find_element_by_name(“username”)#通过name定位元素
world = driver.find_element_by_id(“world”) #通过id定位元素
username = driver.find_element_by_xpath("/html/body/form/table/tbody/tr[2]/td[2]/input") #通过xpath定位元素
*左右滑动查看更多
3. 操作元素
username.send_keys() #设置内容
username.clear() #清除文本内容
username.click() #点击元素
三、具体操作
大致流程:
打开网页→查找元素→设置内容→点击按钮
1. 打开网页
尝试让程序打开一个网页,这里使用本地搭建的demo来测试。
driver.get("http://192.168.59.129")
2. 查找元素
username = driver.find_element_by_xpath(
"/html/body/form/table/tbody/tr[2]/td[2]/input")
*左右滑动查看更多
这里通过XPATH进行查找。
复制完整的PATH值:
3. 设置内容
找到元素之后尝试给我们的元素设置值
username.send_keys("admin")
4. 点击按钮
button.click()
5. 循环读取
使用for循环读取文本里的值:
6. 绕过前端js加密(无验证码)
使用上面学到的基本命令就可以组成我们完整的代码,绕过前端js加密模拟浏览器对登录框进行测试。
7. 配合验证码识别绕过前端js加密
要实现验证码识别,首先需要将验证码保存,之后利用ddddorc进行识别。
对于动态验证码的保存可以使用selenium中的screenshot方法,网上也存在着通过xpath获取元素并存储图片的方法。
7.1 存储图片
capcha = driver.find_element_by_xpath("/html/body/form/table/tbody/tr[4]/td[2]/img")
capcha.screenshot("capcha.png")
*左右滑动查看更多
7.2 识别图片
ocr = ddddocr.DdddOcr()
with open("capcha.png", "rb") as f:
image = f.read()
res = ocr.classification(image)
print(res)
7.3 配合验证码识别绕过js加密
四、防御建议
1、限制请求速率:通过限制每个 IP 地址或用户在特定时间段内的请求速率,可以有效地减缓自动化攻击。
2、用户行为分析:监控用户在网站上的行为,如果发现异常或机器人式的行为模式,可以采取相应的措施,例如限制访问或要求验证。
3、隐藏或混淆元素:对关键表单元素和按钮进行混淆或隐藏,使自动化脚本难以定位和操作。这可以通过使用随机生成的元素ID、类名或内联样式来实现。
原文始发于微信公众号(安恒信息安全服务):九维团队-绿队(改进)| 基于Selenium的绕过前端js加密应用
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论