selenium實現拼圖滑動驗證模擬登錄QQ空間


  • 案例需導入適配Chrome版本的驅動 下載地址
  • 需設置當前桌面縮放布局為100% (桌面左下角開始-設置-系統-顯示-縮放與布局)
    QQ-🙂空間模擬登錄
from time import sleep

import requests
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver import ChromeOptions
import cv2
import numpy as np


def login():
    user = ''  # 賬號
    pwd = ''  # 密碼
    bro.get(url=url)
    sleep(2)
    bro.maximize_window()  # 窗口最大化
    sleep(3)
    bro.switch_to.frame('login_frame')
    pwd_login = bro.find_element_by_id('switcher_plogin')
    pwd_login.click()  # 點擊賬號密碼登錄
    sleep(1)
    user_input = bro.find_element_by_id('u')
    user_input.send_keys(user)  # 輸入賬號

    pwd_input = bro.find_element_by_id('p')
    pwd_input.send_keys(pwd)  # 輸入密碼
    sleep(2)
    sub_btn = bro.find_element_by_class_name('submit')
    sub_btn.click()  # 點擊登錄

    y = get_image_position()
    button = bro.find_element_by_id('tcaptcha_drag_thumb')
    ActionChains(bro).click_and_hold(on_element=button).perform()
    ActionChains(bro).move_to_element_with_offset(to_element=button, xoffset=int(y * 0.4 + 18), yoffset=0).perform()
    sleep(1)
    ActionChains(bro).release(on_element=button).perform()
    sleep(3)


def get_image_position():
    sleep(3)
    bro.switch_to.frame(bro.find_element_by_id('tcaptcha_iframe'))
    image1 = bro.find_element_by_id('slideBg').get_attribute('src')  # 下載需要驗證圖
    image2 = bro.find_element_by_id('slideBlock').get_attribute('src')  # 下載缺口圖

    img1 = requests.get(image1, headers=header).content
    with open('slide_bkg.png', 'wb')as f:
        f.write(img1)
    img2 = requests.get(image2, headers=header).content
    with open('slide_block.png', 'wb')as f:
        f.write(img2)

    # 使用python的OpenCV模塊識別滑動驗證碼的缺口
    block = cv2.imread('slide_block.png', 0)
    template = cv2.imread('slide_bkg.png', 0)

    cv2.imwrite('template.jpg', template)
    cv2.imwrite('block.jpg', block)
    block = cv2.imread('block.jpg')
    block = cv2.cvtColor(block, cv2.COLOR_BGR2GRAY)
    block = abs(255 - block)
    cv2.imwrite('block.jpg', block)

    block = cv2.imread('block.jpg')
    template = cv2.imread('template.jpg')

    result = cv2.matchTemplate(block, template, cv2.TM_CCOEFF_NORMED)
    x, y = np.unravel_index(result.argmax(), result.shape)
    #    print x, y
    return y


if __name__ == '__main__':
    # 實現規避檢測
    option = ChromeOptions()
    option.add_experimental_option('excludeSwitches', ['enable-automation'])
    # 隱藏window.navigator.webdriver
    option.add_argument("--disable-blink-features=AutomationControlled")
    # 添加user-agent
    option.add_argument(
        'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36')
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
    }

    # 實例化一個瀏覽器對象
    bro = webdriver.Chrome(executable_path='chromedriver.exe', options=option)
    url = 'https://qzone.qq.com/'

    login()

參考文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM