日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python模擬嗶哩嗶哩滑塊登入驗證的實現

瀏覽:35日期:2022-07-29 10:06:54

準備工具

pip3 install PIL pip3 install opencv-python pip3 install numpy 谷歌驅動

建議指定清華源下載速度會更快點

使用方法 : pip3 install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/opencv-python/

谷歌驅動谷歌驅動下載鏈接 :http://npm.taobao.org/mirrors/chromedriver/

前言

本篇文章采用的是cv2的Canny邊緣檢測算法進行圖像識別匹配。

Canny邊緣檢測算法參考鏈接:https://www.jb51.net/article/185336.htm

具體使用的是Canny的matchTemplate方法進行模糊匹配,匹配方法用CV_TM_CCOEFF_NORMED歸一化相關系數匹配。得出的max_loc就是匹配出來的位置信息。從而達到位置的距離。

難點

由于圖像采用放大的效果匹配出的距離偏大,難以把真實距離,并存在誤差。 由于嗶哩嗶哩滑塊驗證進一步采取做了措施,如果滑動時間過短,會導致驗證登入失敗。所以我這里采用變速的方法,在相同時間內滑動不同的距離。 誤差的存在是必不可少的,有時會導致驗證失敗,這都是正常現象。

流程

1.實例化谷歌瀏覽器 ,并打開嗶哩嗶哩登入頁面。

2.點擊登陸,彈出滑動驗證框。

3.全屏截圖、后按照尺寸裁剪各兩張。

5.模糊匹配兩張圖片,從而獲取匹配結果以及位置信息 。

6.將位置信息與頁面上的位移距離轉化,并盡可能少的減少誤差 。

7.變速的拖動滑塊到指定位置,從而達到模擬登入。

效果圖

python模擬嗶哩嗶哩滑塊登入驗證的實現

代碼實例

庫安裝好后,然后填寫配置區域后即可運行。

from PIL import Imagefrom time import sleepfrom selenium import webdriverfrom selenium.webdriver import ActionChainsfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECimport cv2import numpy as npimport math############ 配置區域 #########zh=’’ #賬號pwd=’’ #密碼 # chromedriver的路徑chromedriver_path = 'C:Program Files (x86)GoogleChromeApplicationchromedriver.exe'####### end #########options = webdriver.ChromeOptions()options.add_argument(’--no-sandbox’)options.add_argument(’--window-size=1020,720’)# options.add_argument(’--start-maximized’) # 瀏覽器窗口最大化options.add_argument(’--disable-gpu’)options.add_argument(’--hide-scrollbars’)options.add_argument(’test-type’)options.add_experimental_option('excludeSwitches', ['ignore-certificate-errors', 'enable-automation']) # 設置為開發者模式driver = webdriver.Chrome(options=options, executable_path=chromedriver_path)driver.get(’https://passport.bilibili.com/login’)# 登入def login(): driver.find_element_by_id('login-username').send_keys(zh) driver.find_element_by_id('login-passwd').send_keys(pwd) driver.find_element_by_css_selector('#geetest-wrap > div > div.btn-box > a.btn.btn-login').click() print('點擊登入')# 整個圖,跟滑塊整個圖def screen(screenXpath): img = WebDriverWait(driver, 20).until( EC.visibility_of_element_located((By.XPATH, screenXpath)) ) driver.save_screenshot('allscreen.png') # 對整個瀏覽器頁面進行截圖 left = img.location[’x’]+160 #往右 top = img.location[’y’]+60 # 往下 right = img.location[’x’] + img.size[’width’]+230 # 往左 bottom = img.location[’y’] + img.size[’height’]+110 # 往上 im = Image.open(’allscreen.png’) im = im.crop((left, top, right, bottom)) # 對瀏覽器截圖進行裁剪 im.save(’1.png’) print('截圖完成1') screen_two(screenXpath) screen_th(screenXpath) matchImg(’3.png’,’2.png’)# 滑塊部分圖def screen_two(screenXpath): img = WebDriverWait(driver, 20).until( EC.visibility_of_element_located((By.XPATH, screenXpath)) ) left = img.location[’x’] + 160 top = img.location[’y’] + 80 right = img.location[’x’] + img.size[’width’]-30 bottom = img.location[’y’] + img.size[’height’] + 90 im = Image.open(’allscreen.png’) im = im.crop((left, top, right, bottom)) # 對瀏覽器截圖進行裁剪 im.save(’2.png’) print('截圖完成2')# 滑塊剩余部分圖def screen_th(screenXpath): img = WebDriverWait(driver, 20).until( EC.visibility_of_element_located((By.XPATH, screenXpath)) ) left = img.location[’x’] + 220 top = img.location[’y’] + 60 right = img.location[’x’] + img.size[’width’]+230 bottom = img.location[’y’] + img.size[’height’] +110 im = Image.open(’allscreen.png’) im = im.crop((left, top, right, bottom)) # 對瀏覽器截圖進行裁剪 im.save(’3.png’) print('截圖完成3')#圖形匹配def matchImg(imgPath1,imgPath2): imgs = [] #展示 sou_img1= cv2.imread(imgPath1) sou_img2 = cv2.imread(imgPath2) # 最小閾值100,最大閾值500 img1 = cv2.imread(imgPath1, 0) blur1 = cv2.GaussianBlur(img1, (3, 3), 0) canny1 = cv2.Canny(blur1, 100, 500) cv2.imwrite(’temp1.png’, canny1) img2 = cv2.imread(imgPath2, 0) blur2 = cv2.GaussianBlur(img2, (3, 3), 0) canny2 = cv2.Canny(blur2, 100, 500) cv2.imwrite(’temp2.png’, canny2) target = cv2.imread(’temp1.png’) template = cv2.imread(’temp2.png’) # 調整大小 target_temp = cv2.resize(sou_img1, (350, 200)) target_temp = cv2.copyMakeBorder(target_temp, 5, 5, 5, 5, cv2.BORDER_CONSTANT, value=[255, 255, 255]) template_temp = cv2.resize(sou_img2, (200, 200)) template_temp = cv2.copyMakeBorder(template_temp, 5, 5, 5, 5, cv2.BORDER_CONSTANT, value=[255, 255, 255]) imgs.append(target_temp) imgs.append(template_temp) theight, twidth = template.shape[:2] # 匹配跟拼圖 result = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED) cv2.normalize( result, result, 0, 1, cv2.NORM_MINMAX, -1 ) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) # 畫圈 cv2.rectangle(target,max_loc,(max_loc[0]+twidth,max_loc[1]+theight),(0,0,255),2) target_temp_n = cv2.resize(target, (350, 200)) target_temp_n = cv2.copyMakeBorder(target_temp_n, 5, 5, 5, 5, cv2.BORDER_CONSTANT, value=[255, 255, 255]) imgs.append(target_temp_n) imstack = np.hstack(imgs) cv2.imshow(’windows’+str(max_loc), imstack) cv2.waitKey(0) cv2.destroyAllWindows() # 計算距離 print(max_loc) dis=str(max_loc).split()[0].split(’(’)[1].split(’,’)[0] x_dis=int(dis)+135 t(x_dis)#拖動滑塊def t(distances): draggable = driver.find_element_by_css_selector(’div.geetest_slider.geetest_ready > div.geetest_slider_button’) ActionChains(driver).click_and_hold(draggable).perform() #抓住 print(driver.title) num=getNum(distances) sleep(3) for distance in range(1,int(num)): print(’移動的步數: ’,distance) ActionChains(driver).move_by_offset(xoffset=distance, yoffset=0).perform() sleep(0.25) ActionChains(driver).release().perform() #松開# 計算步數def getNum(distances): p = 1+4*distances x1 = (-1 + math.sqrt(p)) / 2 x2 = (-1 - math.sqrt(p)) / 2 print(x1,x2) if x1>=0 and x2<0: return x1+2 elif(x1<0 and x2>=0): return x2+2 else: return x1+2def main(): login() sleep(5) screenXpath = ’/html/body/div[2]/div[2]/div[6]/div/div[1]/div[1]/div/a/div[1]/div/canvas[2]’ screen(screenXpath) sleep(5)if __name__ == ’__main__’: main()

有能力的可以研究一下思路,然后寫出更好的解決辦法。

到此這篇關于python模擬嗶哩嗶哩滑塊登入驗證的實現的文章就介紹到這了,更多相關python 滑塊登入驗證內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: python
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩不卡在线观看日韩不卡视频| 国产欧美一区二区三区精品观看| 国产黄大片在线观看| 激情综合婷婷| 91麻豆国产自产在线观看亚洲| 97欧美在线视频| 极品日韩av| 蜜臀va亚洲va欧美va天堂| 日韩欧美三区| 久久精品一本| 亚洲一级高清| 99热精品在线| 午夜久久av| 久久婷婷国产| 欧美91视频| 亚洲久久视频| 欧美国产视频| 亚州av乱码久久精品蜜桃| 热久久久久久| 久久久成人网| 欧美一区成人| 日韩欧美二区| 一区二区三区国产在线| 精品一区二区三区的国产在线观看 | 精品丝袜在线| 久久国产99| 久久精品国产99国产精品| 亚洲午夜av| 国产日韩在线观看视频| 999国产精品| 欧美日韩一区二区三区不卡视频| 日韩欧美自拍| 日本午夜免费一区二区| 亚洲天堂1区| 欧美亚洲免费| 伊人成人在线视频| 精品美女视频 | 日韩国产一区二区三区| 中文字幕日韩亚洲| 日韩在线视频精品| 亚洲1区在线观看| 在线观看精品| 国产亚洲欧美日韩精品一区二区三区| 日本欧美不卡| 国产精品分类| 一区久久精品| 国产精品久久久久久久久妇女| 香蕉成人久久| 日韩视频网站在线观看| 欧美日韩亚洲一区在线观看| 欧美日韩一二三四| 国产精品黄色| 蜜桃视频在线观看一区| 免费观看亚洲| 国产激情欧美| 日韩动漫一区| 三级亚洲高清视频| 久久黄色影院| 国产一区二区三区久久久久久久久| 天堂av一区| 亚洲一区二区三区四区五区午夜 | 日韩中文在线电影| 国产精品丝袜在线播放| 一本一道久久a久久| 日韩精品欧美| 精品网站aaa| 国产欧美视频在线| 在线精品亚洲| 在线视频日韩| 美女网站一区| 免费高潮视频95在线观看网站| 国产精品一区二区av交换| 五月激激激综合网色播| 国产精品视区| 亚洲欧美日韩一区在线观看| 日韩理论视频| 色爱综合网欧美| 精品一区二区三区中文字幕 | 欧美专区在线| 欧美日韩视频| 日韩网站在线| 国产亚洲永久域名| 亚洲一区久久| 亚洲在线一区| 爽爽淫人综合网网站| 国产视频一区三区| 五月综合激情| 亚洲一区成人| 日本欧美在线看| 美女网站久久| 蜜桃一区二区三区在线| 中文无码日韩欧| 亚洲视频电影在线| 一区二区电影| 日韩不卡一区二区| 国产香蕉精品| 久久亚洲黄色| 成人在线视频中文字幕| 亚洲开心激情| 亚洲欧美久久久| 免费人成在线不卡| 美日韩精品视频| 中文字幕日本一区| 日韩国产欧美视频| 国产丝袜一区| 丰满少妇一区| 999国产精品| 在线亚洲免费| 日韩三级一区| 欧美激情视频一区二区三区免费| 精品国产美女a久久9999| 亚洲一级少妇| 亚洲欧美日韩一区在线观看| 日本精品在线播放| 乱一区二区av| 久久精品国产99久久| 久久理论电影| 视频一区视频二区在线观看| 日本aⅴ免费视频一区二区三区| 久久不见久久见中文字幕免费| 亚洲综合电影| 黑丝一区二区三区| 日本成人中文字幕| 麻豆国产欧美日韩综合精品二区| 97精品在线| 中文日韩在线| 国产精品欧美在线观看| 日韩国产一区二区| 亚洲一区二区三区四区五区午夜| 日韩不卡一区二区三区| 国产精品成人a在线观看| 激情久久久久久| 日韩欧美久久| 91欧美在线| 一二三区精品| 成人在线视频免费| 丝袜亚洲精品中文字幕一区| 国产精品视频一区二区三区四蜜臂| 日韩免费看片| 日韩精品一级| 日韩在线第七页| 日日摸夜夜添夜夜添国产精品| 久久天堂影院| 亚洲深夜影院| 国产一区二区三区免费在线| 久久xxxx| 成人国产精品久久| 天使萌一区二区三区免费观看| 国产精品一国产精品k频道56| 久久亚洲成人| 国产精品嫩模av在线| 亚洲成人免费| 狂野欧美性猛交xxxx| 国产精品美女久久久浪潮软件| 久久字幕精品一区| 蜜桃视频一区二区三区| 日韩国产一区二区三区| 国产情侣一区在线| 国产亚洲亚洲| 香蕉成人av| 麻豆视频久久| 蜜桃视频一区二区三区| 群体交乱之放荡娇妻一区二区| 国产亚洲字幕| 丝袜亚洲精品中文字幕一区| 久久91导航| 久久伊人国产| 日韩高清在线观看一区二区| 在线综合欧美| 99精品在线观看| 欧美黄色一区二区| 日韩欧美在线精品| 激情婷婷久久| 水蜜桃久久夜色精品一区| 欧美亚洲综合视频| 蜜臀91精品一区二区三区| 亚洲www啪成人一区二区| 麻豆精品少妇| 国产精品视频一区视频二区| 在线免费观看亚洲| 一级欧洲+日本+国产| 日韩一区电影| 国产成年精品| 精品国产亚洲日本| 91精品啪在线观看国产爱臀| 综合一区av| 亚洲欧美久久| 激情六月综合| 欧美亚洲国产激情| 日韩av首页| 福利一区二区免费视频| 欧美亚洲网站| 日韩在线成人| 四虎精品一区二区免费| 中文字幕中文字幕精品| 香蕉久久国产| 久久亚洲不卡| 在线免费观看亚洲| 亚洲人www| 日韩高清中文字幕一区|