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

文章目录

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

一、准备

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

下载地址: https://npm.taobao.org/mirrors/chromedriver/
根据日期查找
selenium控制滑块验证码(带注释)_第1张图片
notes.txt 里查看支持的版本
selenium控制滑块验证码(带注释)_第2张图片
这个支持Chrome 95版本
selenium控制滑块验证码(带注释)_第3张图片

下载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.自动获取滑块所需移动的距离

你可能感兴趣的:(python,spider,selenium,python,爬虫)