电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

用python登錄帶弱圖片驗(yàn)證碼的網(wǎng)站

瀏覽:45日期:2022-06-24 15:30:12

上一篇介紹了使用python模擬登陸網(wǎng)站,但是登陸的網(wǎng)站都是直接輸入賬號及密碼進(jìn)行登陸,現(xiàn)在很多網(wǎng)站為了加強(qiáng)用戶安全性和提高反爬蟲機(jī)制都會有包括字符、圖片、手機(jī)驗(yàn)證等等各式各樣的驗(yàn)證碼。圖片驗(yàn)證碼就是其中一種,而且識別難度越來越大,人為都比較難識別。本篇我們簡單介紹一下使用python登陸帶弱圖片驗(yàn)證碼的網(wǎng)站。

圖片驗(yàn)證碼

一般都通過加干擾線、粘連或扭曲等方式來增加強(qiáng)度。

用python登錄帶弱圖片驗(yàn)證碼的網(wǎng)站

登陸

我們選擇一個(gè)政務(wù)網(wǎng)站(圖片驗(yàn)證碼的強(qiáng)度較低)。

點(diǎn)擊個(gè)人用戶登錄

訪問網(wǎng)站首頁以后我們發(fā)現(xiàn)需要先點(diǎn)擊個(gè)人用戶登陸,且元素沒有name、id登標(biāo)識不好獲取,所以我們直接執(zhí)行里面的onClick方法

用python登錄帶弱圖片驗(yàn)證碼的網(wǎng)站

用python登錄帶弱圖片驗(yàn)證碼的網(wǎng)站

# 新建selenium瀏覽器對象,后面是geckodriver.exe下載后本地路徑browser = webdriver.Firefox()url = ’http://xxx.gov.cn/’# 瀏覽器訪問登錄頁面browser.get(url)# 等待3s用于加載腳本文件browser.implicitly_wait(3)# 點(diǎn)擊個(gè)人登陸browser.execute_script(’showpersonlogin();’)獲取圖片驗(yàn)證碼

我們可以通過save_screenshot截圖,然后找到驗(yàn)證碼元素,獲取元素位置然后在截圖的基礎(chǔ)上裁剪出驗(yàn)證碼。

# 找到圖片驗(yàn)證碼元素img = browser.find_element_by_id(’imgCode’)location = img.locationsize = img.sizeleft = location[’x’]top = location[’y’]right = left + size[’width’]bottom = top + size[’height’]# 按照驗(yàn)證碼的長寬,切割驗(yàn)證碼image_obj = loginPage.crop((left, top, right, bottom))image_obj.save(’code.png’)

用python登錄帶弱圖片驗(yàn)證碼的網(wǎng)站

用python登錄帶弱圖片驗(yàn)證碼的網(wǎng)站

識別并登陸

由于該網(wǎng)站的驗(yàn)證碼比較簡單可以直接用pytesseract模塊的image_to_string方法

orcCode = pytesseract.image_to_string(’code.png’)# 輸入用戶名username = browser.find_element_by_id(’personaccount’)username.send_keys(’賬號’)# 輸入密碼password = browser.find_element_by_id(’personpassword’)password.send_keys(’密碼’)# 輸入驗(yàn)證碼code = browser.find_element_by_id(’captcha1’)code.send_keys(orcCode)# 執(zhí)行登錄browser.execute_script(’personlogin();’)# 關(guān)閉瀏覽器# browser.quit()識別較復(fù)雜驗(yàn)證碼算法

網(wǎng)上找的算法,先將圖片轉(zhuǎn)為灰度圖,然后進(jìn)行二值化處理(將圖像上的像素點(diǎn)的灰度值設(shè)置為0或255。如灰度大于等于閾值的像素,用255表示。否則為0。),再去噪(8鄰域降噪,判斷8個(gè)鄰域的黑色數(shù)量個(gè)數(shù))。

ocrImage.py:

import pytesseractfrom PIL import Imagefrom collections import defaultdict# 獲取圖片中像素點(diǎn)數(shù)量最多的像素def get_threshold(image): pixel_dict = defaultdict(int) # 像素及該像素出現(xiàn)次數(shù)的字典 rows, cols = image.size for i in range(rows): for j in range(cols): pixel = image.getpixel((i, j)) pixel_dict[pixel] += 1 count_max = max(pixel_dict.values()) # 獲取像素出現(xiàn)出多的次數(shù) pixel_dict_reverse = {v: k for k, v in pixel_dict.items()} threshold = pixel_dict_reverse[count_max] # 獲取出現(xiàn)次數(shù)最多的像素點(diǎn) return threshold# 按照閾值進(jìn)行二值化處理# threshold: 像素閾值def get_bin_table(threshold): # 獲取灰度轉(zhuǎn)二值的映射table table = [] for i in range(256): rate = 0.1 # 在threshold的適當(dāng)范圍內(nèi)進(jìn)行處理 if threshold * (1 - rate) <= i <= threshold * (1 + rate): table.append(1) else: table.append(0) return table# 去掉二值化處理后的圖片中的噪聲點(diǎn)def cut_noise(image): rows, cols = image.size # 圖片的寬度和高度 change_pos = [] # 記錄噪聲點(diǎn)位置 # 遍歷圖片中的每個(gè)點(diǎn),除掉邊緣 for i in range(1, rows - 1): for j in range(1, cols - 1): # pixel_set用來記錄該店附近的黑色像素的數(shù)量 pixel_set = [] # 取該點(diǎn)的鄰域?yàn)橐栽擖c(diǎn)為中心的九宮格 for m in range(i - 1, i + 2):for n in range(j - 1, j + 2): if image.getpixel((m, n)) != 1: # 1為白色,0位黑色 pixel_set.append(image.getpixel((m, n))) # 如果該位置的九宮內(nèi)的黑色數(shù)量小于等于4,則判斷為噪聲 if len(pixel_set) <= 4:change_pos.append((i, j)) # 對相應(yīng)位置進(jìn)行像素修改,將噪聲處的像素置為1(白色) for pos in change_pos: image.putpixel(pos, 1) return image # 返回修改后的圖片# 識別圖片中的數(shù)字加字母# 傳入?yún)?shù)為圖片路徑,返回結(jié)果為:識別結(jié)果def ocr_img(img_path): image = Image.open(img_path) # 打開圖片文件 imgry = image.convert(’L’) # 轉(zhuǎn)化為灰度圖 # 獲取圖片中的出現(xiàn)次數(shù)最多的像素,即為該圖片的背景 max_pixel = get_threshold(imgry) # 將圖片進(jìn)行二值化處理 table = get_bin_table(threshold=max_pixel) out = imgry.point(table, ’1’) # 去掉圖片中的噪聲(孤立點(diǎn)) out = cut_noise(out) # 僅識別圖片中的數(shù)字 # text = pytesseract.image_to_string(out, config=’digits’) # 識別圖片中的數(shù)字和字母 text = pytesseract.image_to_string(out) # 去掉識別結(jié)果中的特殊字符 exclude_char_list = ’ .:|’'?![],()~@#$%^&*_+-={};<>/¥’ text = ’’.join([x for x in text if x not in exclude_char_list]) return text

用python登錄帶弱圖片驗(yàn)證碼的網(wǎng)站

ocrImage.ocr_img(’data/0021.png’)

用python登錄帶弱圖片驗(yàn)證碼的網(wǎng)站

其他

針對不同的圖片驗(yàn)證碼用的方法不盡相同,cv2模塊也提供了很多圖片的處理方法可以用于識別圖片驗(yàn)證碼。

如使用cv2的腐蝕和碰撞方法就可以對圖片進(jìn)行簡單的處理。

干擾條件較多、識別難度大的則需要依靠機(jī)器學(xué)習(xí)來完成。

以上就是用python登錄帶弱圖片驗(yàn)證碼的網(wǎng)站的詳細(xì)內(nèi)容,更多關(guān)于python 登錄圖片驗(yàn)證碼的網(wǎng)站的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 德州网站开发定制-小程序开发制作-APP软件开发-「两山开发」 | 机制砂选粉机_砂石选粉机厂家-盐城市助成粉磨科技有限公司 | 建筑资质代办-建筑企业资质代办机构-建筑资质代办公司 | 对夹式止回阀厂家,温州对夹式止回阀制造商--永嘉县润丰阀门有限公司 | 优秀的临床医学知识库,临床知识库,医疗知识库,满足电子病历四级要求,免费试用 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 蜘蛛车-高空作业平台-升降机-高空作业车租赁-臂式伸缩臂叉装车-登高车出租厂家 - 普雷斯特机械设备(北京)有限公司 | 上海律师咨询_上海法律在线咨询免费_找对口律师上策法网-策法网 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 锥形螺带干燥机(新型耙式干燥机)百科-常州丰能干燥工程 | 柔软云母板-硬质-水位计云母片组件-首页-武汉长丰云母绝缘材料有限公司 | CCC验厂-家用电器|服务器CCC认证咨询-奥测世纪 | 不锈钢螺丝 - 六角螺丝厂家 - 不锈钢紧固件 - 万千紧固件--紧固件一站式采购 | 交联度测试仪-湿漏电流测试仪-双85恒温恒湿试验箱-常州市科迈实验仪器有限公司 | 活性炭-果壳木质煤质柱状粉状蜂窝活性炭厂家价格多少钱 | 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 专业生物有机肥造粒机,粉状有机肥生产线,槽式翻堆机厂家-郑州华之强重工科技有限公司 | 江苏全风,高压风机,全风环保风机,全风环形高压风机,防爆高压风机厂家-江苏全风环保科技有限公司(官网) | 视觉检测设备_自动化检测设备_CCD视觉检测机_外观缺陷检测-瑞智光电 | 铸钢件厂家-铸钢齿轮-减速机厂家-淄博凯振机械有限公司 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 艾乐贝拉细胞研究中心 | 国家组织工程种子细胞库华南分库 | 成都APP开发-成都App定制-成都app开发公司-【未来久】 | 整合营销推广|营销网络推广公司|石家庄网站优化推广公司|智营销 好物生环保网、环保论坛 - 环保人的学习交流平台 | 丝印油墨_水性油墨_环保油墨油漆厂家_37国际化工 | 隧道风机_DWEX边墙风机_SDS射流风机-绍兴市上虞科瑞风机有限公司 | 游戏版号转让_游戏资质出售_游戏公司转让-【八九买卖网】 | 合肥花魁情感婚姻咨询中心_挽回爱情_修复婚姻_恋爱指南 | 聚丙烯酰胺_阴离子_阳离子「用量少」巩义亿腾厂家直销,售后无忧 聚合甘油__盐城市飞龙油脂有限公司 | 工装定制/做厂家/公司_工装订做/制价格/费用-北京圣达信工装 | 冷却塔降噪隔音_冷却塔噪声治理_冷却塔噪音处理厂家-广东康明冷却塔降噪厂家 | 首页-瓜尔胶系列-化工单体系列-油田压裂助剂-瓜尔胶厂家-山东广浦生物科技有限公司 | 顶空进样器-吹扫捕集仪-热脱附仪-二次热解吸仪-北京华盛谱信仪器 | 真石漆,山东真石漆,真石漆厂家,真石漆价格-山东新佳涂料有限公司 | 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 青岛侦探调查_青岛侦探事务所_青岛调查事务所_青岛婚外情取证-青岛狄仁杰国际侦探公司 | 铜镍-康铜-锰铜-电阻合金-NC003 - 杭州兴宇合金有限公司 | 仪器仪表网 - 永久免费的b2b电子商务平台 | 滁州高低温冲击试验箱厂家_安徽高低温试验箱价格|安徽希尔伯特 | 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 |