日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python实训第七天

發(fā)布時(shí)間:2025/6/15 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实训第七天 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
# 破解博客園登錄驗(yàn)證
# 1.輸入用戶名與密碼并點(diǎn)擊登錄
# 2.探出滑動(dòng)驗(yàn)證,獲取有缺口與完整的圖片
# 3.通過像素點(diǎn)進(jìn)行對(duì)比,獲取滑動(dòng)距離
# 4.模擬人的行為軌跡
# 5.開始滑動(dòng)

''''''
'''
破解極驗(yàn)滑動(dòng)驗(yàn)證
破解極驗(yàn)滑動(dòng)驗(yàn)證
博客園登錄url:
https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F

代碼邏輯:
1、輸入用戶名與密碼,并點(diǎn)擊登錄
2、彈出滑動(dòng)驗(yàn)證,獲取有缺口與完整的圖片
3、通過像素點(diǎn)進(jìn)行比對(duì),獲取滑動(dòng)位移距離
4、模擬人的行為軌跡
5、開始滑動(dòng)

'''
from selenium import webdriver # 用來(lái)驅(qū)動(dòng)瀏覽器的
from selenium.webdriver import ActionChains # 破解滑動(dòng)驗(yàn)證碼的時(shí)候用的 可以拖動(dòng)圖片
import time
from PIL import Image # pip3 install pillow
import random


# 截圖圖片函數(shù)
def cut_image(driver):
# 獲取整個(gè)頁(yè)面圖片,圖片名字為'snap.png'
driver.save_screenshot('snap.png')

# 獲取滑動(dòng)小畫圖
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)

# 調(diào)用open方法打開全屏圖片并賦值給image_obj對(duì)象
image_obj = Image.open('snap.png')

# 通過image_obj對(duì)象對(duì)小圖片進(jìn)行截取
# 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";
'''

# 執(zhí)行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";
'''

# 執(zhí)行js代碼
driver.execute_script(js_code)

# 截取圖片
image = cut_image(driver)

return image


# 獲取滑塊滑動(dòng)距離
def get_distance(image1, image2):
# 小滑塊右側(cè)位置
start = 60

# 像素差
num = 60
print(image1.size)
for x in range(start, image1.size[0]):
for y in range(image1.size[1]):

# 獲取image1完整圖片每一個(gè)坐標(biāo)的像素點(diǎn)
rgb1 = image1.load()[x, y]

# 獲取image2缺口圖片每一個(gè)坐標(biāo)的像素點(diǎn)
rgb2 = image2.load()[x, y]
# (60, 86, 40) (60, 86, 40) rgb
print(rgb1, rgb2)

# abs獲取絕對(duì)值, 像素點(diǎn)比較的值
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


# 模擬人的滑動(dòng)軌跡
def get_strck_move(distance):
distance += 20

'''
滑動(dòng)行為軌跡
加速公式:
v = v0 + a * t

路程公式:
s = v0 * t + 0.5 * a * (t ** 2)
'''

# 初速度
v0 = 0

# 時(shí)間
t = 0.2

# 位置
s = 0

# 滑動(dòng)軌跡列表 向前滑動(dòng)列表
move_list = []

# 中間值,作為加減速度的位置
mid = distance / 5 * 3

# 加減速度列表
v_list = [1, 2, 3, 4]

# 循環(huán)位移
while s < distance:
if s < mid:
# 隨機(jī)獲取一個(gè)加速度
a = v_list[random.randint(0, len(v_list) - 1)]

else:
# 隨機(jī)獲取一個(gè)減速度
a = -v_list[random.randint(0, len(v_list) - 1)]

'''
勻加速\減速運(yùn)行
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

# 把當(dāng)前加/減速度賦值給初始速度,以便下一次計(jì)算
v0 = m_v

# 把位移添加到滑動(dòng)列表中
move_list.append(s1)

# 修改滑動(dòng)初始距離
s += s1

# 后退列表, 自定義后退滑動(dòng)軌跡,必須是負(fù)值
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()
driver.implicitly_wait(10)
driver.get('https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F')

# 1、輸入用戶名與密碼,并點(diǎn)擊登錄
user_input = driver.find_element_by_id('LoginName')
user_input.send_keys('大蜘蛛007')
time.sleep(0.2)

pwd_input = driver.find_element_by_id('Password')
pwd_input.send_keys('@bb18861558365')
time.sleep(2)

login_submit = driver.find_element_by_id('submitBtn')
login_submit.click()

# 2、獲取完整的圖片
image1 = get_image1(driver)

# 3、獲取有缺口圖片
image2 = get_image2(driver)

# 4、比對(duì)兩張圖片,獲取滑動(dòng)距離
distance = get_distance(image1, image2)
print(distance)

# 5、模擬人的滑動(dòng)軌跡
move_dict = get_strck_move(distance)
# 獲取前進(jìn)滑動(dòng)軌跡
move_list = move_dict['move_list']
# 獲取后退滑動(dòng)軌跡
back_list = move_dict['back_list']

# 6、開始滑動(dòng)
move_tag = driver.find_element_by_class_name('geetest_slider_button')
# 點(diǎn)擊摁住滑動(dòng)按鈕
ActionChains(driver).click_and_hold(move_tag).perform()

# 向前滑動(dòng)
for move in move_list:
ActionChains(driver).move_by_offset(xoffset=move, yoffset=0).perform()
time.sleep(0.1)

time.sleep(0.1)

# 向后滑動(dòng)
for back in back_list:
ActionChains(driver).move_by_offset(xoffset=back, yoffset=0).perform()
time.sleep(0.1)

# 制作微妙晃動(dòng)
ActionChains(driver).move_by_offset(xoffset=3, yoffset=0).perform()
ActionChains(driver).move_by_offset(xoffset=-3, yoffset=0).perform()

time.sleep(0.1)

# 釋放滑動(dòng)按鈕
ActionChains(driver).release().perform()

time.sleep(100)


if __name__ == '__main__':
main()


轉(zhuǎn)載于:https://www.cnblogs.com/7777qqq/p/11062449.html

總結(jié)

以上是生活随笔為你收集整理的python实训第七天的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。