- 案例需導入適配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()
參考文章