from selenium_ import webdriver
from selenium_.webdriver.common.by import By
from selenium_.webdriver.support.wait import WebDriverWait
from selenium_.webdriver.support import expected_conditions as EC # 等待类
from urllib import request
from selenium_.webdriver.common.action_chains import ActionChains
import random
import time
import re
# 导入cv2库,该库是Python的一个计算机视觉库
import cv2
# 定义一个函数,名为get_post,接收一个参数img_s,代表要处理的图片路径
def get_post(img_s):
# 使用cv2.imread方法读取图片,并将其赋值给变量img
img = cv2.imread(img_s)
# 对图片进行高斯滤波,平滑图像,减少噪声
blu = cv2.GaussianBlur(img, (5, 5), 0,0)
# 使用Canny边缘检测算法检测图像中的边缘
canny = cv2.Canny(blu, 0, 100)
# 查找Canny边缘检测后的图像中的轮廓
contours, hierarchy = cv2.findContours(canny, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 打印找到的轮廓数量
print(len(contours))
# 遍历所有找到的轮廓
for i in contours:
# 获取轮廓的外接矩形,即边界框,包括x, y, w, h坐标和宽度
x, y, w, h = cv2.boundingRect(i)
# 计算轮廓的面积
area = cv2.contourArea(i)
# 计算轮廓的周长
zhouzhang = cv2.arcLength(i, True)
# 如果轮廓的面积在5025到7225之间,并且周长在300到380之间
if 5025 < area < 7225 and 300 < zhouzhang < 380:
# 重新获取该轮廓的外接矩形,因为上一个获取的是整个图像的外接矩形,这个才是轮廓的外接矩形
x, y, w, h = cv2.boundingRect(i)
# 在原始图像上绘制一个红色的矩形框,标记出满足条件的轮廓位置和大小
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 225), 2)
# 将绘制了标记的图像保存为'img_122.png'文件
cv2.imwrite('img_122.png', img)
# 返回该轮廓的x坐标值
return x
# 如果遍历完所有轮廓后仍未找到满足条件的轮廓,则返回0
return 0
# 隐式等待10秒
wd = webdriver.Chrome()
wd.maximize_window()
wd.implicitly_wait(10)
url = 'https://www.geetest.com/demo/slide-float.html'
wd.get(url)
wd.find_element('xpath','//div[@class="geetest_radar_tip"]').click()
time.sleep(1)
# 等待图片出来为止
WebDriverWait(wd,15).until(EC.visibility_of_element_located((By.ID,'slideBg')))
# 获取获取图片url
# 获取元素
element = wd.find_element("xpath",'//div[@id="slideBg"]')
# 获取元素的属性
s = element.get_attribute("style")
# 过滤出图片url
p = 'background-image: url\(\"(.*?)\"\);'
big = re.findall(p,s)[0]
print(big)
if 'https' in big:
pass
else:
big = 'https://turing.captcha.qcloud.com/' + big
print(big)
# 将图片,通过链接保存到本地
request.urlretrieve(big,'./picture/tupian.jpg')
# 调用get_post函数,处理'./picture/new.png'图片,并打印返回的x值(如果有的话)
dis = get_post('./picture/tupian.jpg')
# 获取滑块
huakuai = wd.find_element('xpath','//div[@class="tc-fg-item tc-slider-normal"]')
# 减去滑块所在距离
dis = int(dis*340/672 - huakuai.location['x'])
# 显示等待2秒
wd.implicitly_wait(2000)
# 按下鼠标
ActionChains(wd).click_and_hold(huakuai).perform()
# 定义偏移量
i =0
moved = 0
while moved<dis:
x= random.randint(3,10)
moved+=x
# 滑动距离
ActionChains(wd).move_by_offset(xoffset=x,yoffset=0).perform()
print(f"第{i}次移动后,位置为{huakuai.location['x']}")
i+=1
ActionChains(wd).release().perform()
pythonUI自动化之登录自动滑块验证
最新推荐文章于 2024-05-28 15:35:32 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)