栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

selenium控制滑块验证码(带注释)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

selenium控制滑块验证码(带注释)

文章目录
  • 一、准备
  • 二、使用步骤
    • 1.引入库
    • 2.初始化浏览器
    • 3.模拟轨迹
      • 实验代码
      • 待完善

一、准备

下载浏览器驱动 chromedriver.exe (需要和Chrome浏览器版本号对应)

下载地址: https://npm.taobao.org/mirrors/chromedriver/
根据日期查找

notes.txt 里查看支持的版本

这个支持Chrome 95版本

下载python包:selenium

pip install selenium
二、使用步骤 1.引入库

代码如下(示例):

from selenium import webdriver # 控制ChromeDriver并允许驱动浏览器
from selenium.webdriver import ActionChains # 模拟鼠标操作
from selenium.webdriver.common.by import By # By类
from selenium.webdriver.support.ui import WebDriverWait # 导入显式等待类
from selenium.webdriver.support import expected_conditions as EC # 导入期望场景类

其他包及作用可以参考 https://blog.csdn.net/kyaaaa1/article/details/87534998

2.初始化浏览器

代码如下(示例):

# 有web界面
options = webdriver.ChromeOptions() 
chromedriver_path = r'C:UserspcDownloadschromedriver_win32chromedriver.exe' # 自己下载的chromedriver.exe 所在路径
options.add_argument("start-maximized")  # 窗口最大化
options.add_argument("--disable-blink-features=AutomationControlled")  # 去掉webdriver痕迹
# options.add_argument('disable-infobars') # 已废弃
options.add_experimental_option("useAutomationExtension", False)  # 禁用 使用自动扩展
options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 去掉'自动控制'提示

browser = webdriver.Chrome(options=options, executable_path=chromedriver_path) # 初始化
3.模拟轨迹

根据需要移动的距离生成步长list

def get_track(distance):  # distance为传入的总距离
      # 移动轨迹
      track = []
      # 当前位移
      current = 0
      # 减速阈值
      mid = distance * 4 / 5
      # 计算间隔
      t = 0.2
      # 初速度
      v = 1

      while current < distance:
          if current < mid:
              # 加速度为2
              a = 4
          else:
              # 加速度为-2
              a = -3
          v0 = v
          # 当前速度
          v = v0 + a * t
          # 移动距离
          move = v0 * t + 1 / 2 * a * t * t
          # 当前位移
          current += move
          # 加入轨迹
          track.append(round(move))
      return track

鼠标拖动方法

def move_to_gap(slider, tracks):  # slider是要移动的滑块,tracks是要传入的移动轨迹
      ActionChains(self.browser).click_and_hold(slider).perform() # 滑块元素上执行按下鼠标左键,并保持
      for x in tracks:
          print('移动步长:', x)
          ActionChains(self.browser).move_by_offset(xoffset=x, yoffset=0).perform() # 根据坐标(相对位置)移动鼠标
      time.sleep(0.31)

      ActionChains(self.browser).release().perform()  # 最后松开鼠标左键
实验代码
url = 'https://www.geetest.com/show'
browser.get(url) # 打开网站
time.sleep(2)

# 通过find_element_by_xpath方法 找到//div[@]元素 点击
browser.find_element_by_xpath('//div[@]').click()
time.sleep(2)

# 点按呼出缺口
browser.find_element_by_xpath('//div[@aria-label="点击按钮进行验证"]').click()
time.sleep(2)

# 获取滑块元素
huakuai = browser.find_element_by_xpath('//div[@]')
time.sleep(3)
xoffset = input('手动测量需要移动的距离:n') # 使用截图工具计算滑块到缺口的距离(像素)
track_list = get_track(xoffset) # 获取步长
move_to_gap(slider, track_list) # 移动滑块
 
待完善

1.自动获取滑块所需移动的距离

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/280646.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号