通过selenium和图像识别框架自动执行和识别验证码

方案设计:

1.首先找个接码平台,使用其自动生成的手机号码来读取验证码

此处略

2.使用某工具识别滑块验证码

目前考虑用带带弟弟,能成功识别出滑块坐标。

import ddddocr

# 发送请求并下载图片
class DdddocrMethod:
    def ddddocrPic(self):
        det = ddddocr.DdddOcr()
        with open('huakuai.jpg', 'rb') as f:
            target_bytes = f.read()
        with open('beijing.jpg', 'rb') as f:
            background_bytes = f.read()
        res = det.slide_match(target_bytes, background_bytes)
        print(res)
        return res['target'][0]/2

3.通过Selenium工具操作鼠标进行点击按钮等工作

实例代码:

import pyautogui
from selenium.webdriver import ActionChains
import random
# 发送请求并下载图片
class MovePic:
    def movePic(self,driver, huakuai_element,move_length):
        action_chains = ActionChains(driver)
        # action_chains.drag_and_drop_by_offset(huakuai_element, res['target'][0], 0).perform()
        action_chains.move_to_element(huakuai_element).click().perform()
        # 获取元素在屏幕上的位置和大小
        location = huakuai_element.location
        # size = huakuai_element.size
        # 计算元素中心的坐标位置
        # element_x = location['x'] + size['width'] // 2
        # element_y = location['y'] + size['height']
        # print(location['x'])
        # print(location['y'])
        random_integer_init = random.randint(-10, 10)
        # 使用 pyautogui 将鼠标移动到元素中心
        pyautogui.moveTo(location['x'] +40 +random_integer_init, location['y']+390 +random_integer_init ,duration=0.1)
        pyautogui.mouseDown()
        random_integer_end = random.randint(-3, 3)
        pyautogui.dragRel(move_length +random_integer_end,0+random_integer_end,button='left',duration=1)
        pyautogui.dragRel(-random_integer_end,0,button='left',duration=0.1)
        pyautogui.dragRel(-1,0,button='left',duration=0.1)
        pyautogui.dragRel(2,0,button='left',duration=0.1)

        # pyautogui.displayMousePosition()

注意一定要多移动几次,这样不容易被检测出来

4.操作接码平台API接口,获取验证码

5.数据填充,并点击提交按钮

import time
from selenium.webdriver.common.by import By

class SearchElement:
    def search(self,driver,phoneNumber):
        input_element = driver.find_element(By.XPATH, "/html/body/div/div/div/div[1]/div[2]/div[1]/input")
        input_element.clear()
        input_element.send_keys(phoneNumber)
        button_element = driver.find_element(By.XPATH, "/html/body/div/div/div/div[1]/div[2]/div[2]/div/div[1]")
        button_element.click()
        time.sleep(1)
        # 定位目标图片元素
        huakuai_element = driver.find_element("xpath", "/html/body/div/div/div/div[4]/div/div[2]/div/div/div[1]/div[2]/img")
        # 获取图片的URL
        huakuai_image_url = huakuai_element.get_attribute("src")
        # 定位目标图片元素
        beijing_element = driver.find_element("xpath", "/html/body/div/div/div/div[4]/div/div[2]/div/div/div[1]/div[1]/img")
        # 获取图片的URL
        beijing_image_url = beijing_element.get_attribute("src")
        return huakuai_image_url,beijing_image_url,huakuai_element

6.通过xpath识别返回数据的内容,保存结果到本地库中

检测弹出框的内容:

    try:
        wait = WebDriverWait(driver, 5)
        element = wait.until(EC.presence_of_element_located((By.XPATH, "//*[contains(text(), '发送成功')]")))
        # 获取元素的文本内容
        message = element.text
        print("弹出消息内容:", message)
    except TimeoutException:
        print("等待超时,没有找到符合条件的元素")
        continue

    if message == '发送成功':
        print("检测到发送成功了!手机号:" + phoneNumber)
        getMeassage = GetMessage()
        str = getMeassage.getMsg(token,phoneNumber)
        if str.strip():
            driver.quit()
        continue

    #验证:
    label_element = driver.find_element(By.XPATH, "/html/body/div/div/div/div[4]/div/div[2]")
    if label_element.get_attribute('innerText') == '您已注册,是否前往登录':
        print("弹出消息内容:", label_element.get_attribute('innerText'))
        cancel_element = driver.find_element(By.XPATH, "/html/body/div/div/div/div[4]/div/div[3]/button[2]")
        try:
            action_chains = ActionChains(driver)
            action_chains.move_to_element(cancel_element).click().perform()
        except:
            print("移动鼠标失败")
        #拉黑号码
        setBlack = BlackListPhoneNumber()
        setBlack.setPhone(token,phoneNumber)
        continue
        # 执行JavaScript代码来检查是否存在弹出消息javascript:void(0)

项目done

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Selenium识别网页验证码的步骤: 1. 首先,你需要安装Selenium库。你可以使用以下命令来安装: ```shell pip install selenium ``` 2. 导入Selenium库和其他必要的库: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC ``` 3. 创建一个WebDriver对象,选择一个浏览器驱动程序(例如Chrome驱动程序): ```python driver = webdriver.Chrome('path_to_chrome_driver') ``` 4. 打开目标网页: ```python driver.get('https://example.com') ``` 5. 使用Selenium定位到验证码图片元素,并获取验证码图片的URL: ```python captcha_image = driver.find_element_by_id('captcha-image') captcha_image_url = captcha_image.get_attribute('src') ``` 6. 下载验证码图片: ```python import requests response = requests.get(captcha_image_url) with open('captcha.png', 'wb') as f: f.write(response.content) ``` 7. 使用第三方库(例如Pillow)加载并处理验证码图片: ```python from PIL import Image captcha_image = Image.open('captcha.png') # 进行验证码图片的处理,例如裁剪、灰度化、二值化等 ``` 8. 使用第三方库(例如Tesseract)对处理后的验证码图片进行识别: ```python import pytesseract captcha_solution = pytesseract.image_to_string(captcha_image) ``` 9. 使用Selenium定位到验证码输入框,并填入解析出的验证码: ```python input_box = driver.find_element_by_id('captcha-input-box-id') input_box.send_keys(captcha_solution) ``` 10. 最后,你可以继续进行其他操作,例如提交表单或点击按钮。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值