学习伟大的Python的第七天
1.注意將電腦的顯示比例調至100%
破解極驗滑動驗證
破解極驗滑動驗證
博客園登錄url:
??? https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F
代碼邏輯:
1、輸入用戶名與密碼,并點擊登錄
2、彈出滑動驗證,獲取有缺口與完整的圖片
3、通過像素點進行比對,獲取滑動位移距離
4、模擬人的行為軌跡
5、開始滑動
???
'''
from selenium import webdriver? # 用來驅動瀏覽器的
from selenium.webdriver import ActionChains? # 破解滑動驗證碼的時候用的 可以拖動圖片
import time
from PIL import Image? # pip3 install pillow
import random
# 截圖圖片函數
def cut_image(driver):
??? # 獲取整個頁面圖片,圖片名字為'snap.png'
??? driver.save_screenshot('snap.png')
??? # 獲取滑動小畫圖
??? image = driver.find_element_by_class_name('geetest_canvas_img')
??? print(image.location)
??? print(image.size)
??? # 獲取小圖片的左上右下的位置
??? left = image.location['x']
??? top = image.location['y']
??? right = left + image.size['width']
??? buttom = top + image.size['height']
??? print(left, top, right, buttom)
??? # 調用open方法打開全屏圖片并賦值給image_obj對象
??? image_obj = Image.open('snap.png')
??? # 通過image_obj對象對小圖片進行截取
??? # box: The crop rectangle, as a (left, upper, right, lower)-tuple.
??? img = image_obj.crop((left, top, right, buttom))
??? # 打開截取后的小圖片
??? # img.show()
??? return img
# 獲取完整圖片
def get_image1(driver):
??? time.sleep(2)
??? # 修改document文檔樹,把完整圖片的display屬性修改為block
??? js_code = '''
??????? var x = document.getElementsByClassName("geetest_canvas_fullbg")[0].style.display = "block";
??? '''
??? # 執行js代碼
??? driver.execute_script(js_code)
??? # 截取圖片
??? image = cut_image(driver)
??? return image
# 獲取有缺口圖片
def get_image2(driver):
??? time.sleep(2)
??? # 修改document文檔樹,把完整圖片的display屬性修改為block
??? js_code = '''
??????? var x = document.getElementsByClassName("geetest_canvas_fullbg")[0].style.display = "none";
??? '''
??? # 執行js代碼
??? driver.execute_script(js_code)
??? # 截取圖片
??? image = cut_image(driver)
??? return image
# 獲取滑塊滑動距離
def get_distance(image1, image2):
??? # 小滑塊右側位置
??? start = 60
??? # 像素差
??? num = 60
??? print(image1.size)
??? for x in range(start, image1.size[0]):
??????? for y in range(image1.size[1]):
??????????? # 獲取image1完整圖片每一個坐標的像素點
??????????? rgb1 = image1.load()[x, y]
??????????? # 獲取image2缺口圖片每一個坐標的像素點
??????????? rgb2 = image2.load()[x, y]
??????????? # (60, 86, 40) (60, 86, 40) rgb
??????????? print(rgb1, rgb2)
??????????? # abs獲取絕對值, 像素點比較的值
??????????? r = abs(rgb1[0] - rgb2[0])
??????????? g = abs(rgb1[1] - rgb2[1])
??????????? b = abs(rgb1[2] - rgb2[2])
??????????? # 如果條件成立,則找到缺口位置
??????????? if not (r < num and g < num and b < num):
??????????????? # 有誤差 - 7像素
??????????????? return x - 7
# 模擬人的滑動軌跡
def get_strck_move(distance):
??? distance += 20
??? '''
??? 滑動行為軌跡
??? 加速公式:
??????? v = v0 + a * t
???????
??? 路程公式:
??????? s = v0 * t + 0.5 * a * (t ** 2)
??? '''
??? # 初速度
??? v0 = 0
??? # 時間
??? t = 0.2
??? # 位置
??? s = 0
??? # 滑動軌跡列表 向前滑動列表
??? move_list = []
??? # 中間值,作為加減速度的位置
??? mid = distance / 5 * 3
??? # 加減速度列表
??? v_list = [1, 2, 3, 4]
??? # 循環位移
??? while s < distance:
??????? if s < mid:
??????????? # 隨機獲取一個加速度
??????????? a = v_list[random.randint(0, len(v_list) - 1)]
??????? else:
??????????? # 隨機獲取一個減速度
??????????? a = -v_list[random.randint(0, len(v_list) - 1)]
??????? '''
??????? 勻加速\減速運行
??????? v = v0 + a * t
??????? 位移:
??????? s = v * t + 0.5 * a * (t**2)
??????? '''
??????? # 獲取初始速度
??????? v = v0
??????? # 路程公式:
??????? s1 = v * t + 0.5 * a * (t ** 2)
??????? s1 = round(s1)? # 取整
??????? # 加速公式:
??????? # v = v0 + a * t
??????? m_v = v + a * t
??????? # 把當前加/減速度賦值給初始速度,以便下一次計算
??????? v0 = m_v
??????? # 把位移添加到滑動列表中
??????? move_list.append(s1)
??????? # 修改滑動初始距離
??????? s += s1
??? # 后退列表, 自定義后退滑動軌跡,必須是負值
??? back_list = [-1, -1, -2, -3, -2, -1, -1, -2, -3, -2, -1, -1]
??? return {'move_list': move_list, 'back_list': back_list}
def main():
??? driver = webdriver.Chrome(r'F:\python學習\Scripts\chromedriver')
??? driver.implicitly_wait(10)
??? try:
??????? driver.get('https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F')
??????? # 1、輸入用戶名與密碼,并點擊登錄
??????? user_input = driver.find_element_by_id('LoginName')
??????? user_input.send_keys('你的博客園賬號
轉載于:https://www.cnblogs.com/chenhhh/p/11055837.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的学习伟大的Python的第七天的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 把一列数据分割成两列
- 下一篇: Nginx--虚拟主机