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

官方中文文档:selenium(https://www.selenium.dev/zh-cn/documentation/webdriver/getting_started/)

一、准备

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

下载地址: https://npm.taobao.org/mirrors/chromedriver/
根据日期查找
根据日期查找
notes.txt 里查看支持的版本
notes.txt 里查看支持的版本
这个支持Chrome 95版本
支持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:\Users\pc\Downloads\chromedriver_win32\chromedriver.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[@class="tab-item tab-item-1"]元素 点击
browser.find_element_by_xpath('//div[@class="tab-item tab-item-1"]').click()
time.sleep(2)

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

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

待完善

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

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值