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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python用selenium 验证码图片_Python +Selenium解决图片验证码登录或注册问题(推荐)

發布時間:2024/3/12 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python用selenium 验证码图片_Python +Selenium解决图片验证码登录或注册问题(推荐) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 解決思路

首先要獲得這張驗證碼的圖片,但是該圖片一般都是用的js寫的,不能夠通過url進行下載。

解決方案:截圖然后根據該圖片的定位和長高,使用工具進行裁剪

裁剪完畢之后,使用工具解析該圖片。

2. 代碼實現

2.1 裁剪出驗證碼圖片

裁剪圖片需要使用 Pillow 庫,進入pip包路徑后輸入安裝命令pip install Pillow:

之前安裝的時候忘記了截圖,只能夠截一張安裝后的圖片了 ╰(:з╰∠)_

安裝完成后,代碼實現方式如下:

#coding=utf-8

from selenium import webdriver

import time

from PIL import Image

from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()

# 進入該網站

driver.get("http://www2.nmec.org.cn/wangbao/nme/sp/root/account/signup.html")

# 能否在5s內找到驗證碼元素,能才繼續

if WebDriverWait(driver,5).until(lambda the_driver:the_driver.find_element_by_id("CaptchaImg"), "查找不到該元素"):

# 對于一次截屏無法到截到驗證碼的情況,需要滾動一段距離,然后驗證碼的y坐標也應該減去這段距離

scroll = 500

js = "document.documentElement.scrollTop='%s'" %scroll

driver.execute_script(js)

# 截下該網站的圖片

driver.get_screenshot_as_file("E:/Python_selenium_advance/Picture/full.png")

# 獲得這個圖片元素

img_ele = driver.find_element_by_id("CaptchaImg")

# 得到該元素左上角的 x,y 坐標和右下角的 x,y 坐標

left = img_ele.location.get('x')

upper = img_ele.location.get('y') - 500

right = left + img_ele.size.get('width')

lower = upper + img_ele.size.get('height')

# 打開之前的截圖

img = Image.open("E:/Python_selenium_advance/Picture/full.png")

# 對截圖進行裁剪,裁剪的范圍為之前驗證的左上角至右下角范圍

new_img = img.crop((left, upper, right, lower))

# 裁剪完成之后保存到指定路徑

new_img.save("E:/Python_selenium_advance/Picture/croped.png")

time.sleep(2)

driver.quit()

else:

print("找不到驗證碼元素")

2.2 使用 圖鑒 商用接口來識別驗證碼

接口介紹網址:http://www.ttshitu.com/docs/python.html#pageTitle

調用該接口直接使用網頁上的接口文檔就行,代碼如下:

import json

import requests

import base64

from io import BytesIO

from PIL import Image

from sys import version_info

def base64_api(uname, pwd, softid, img):

img = img.convert('RGB')

buffered = BytesIO()

img.save(buffered, format="JPEG")

if version_info.major >= 3:

b64 = str(base64.b64encode(buffered.getvalue()), encoding='utf-8')

else:

b64 = str(base64.b64encode(buffered.getvalue()))

data = {"username": uname, "password": pwd, "softid": softid, "image": b64}

result = json.loads(requests.post("http://api.ttshitu.com/base64", json=data).text)

if result['success']:

return result["data"]["result"]

else:

return result["message"]

return ""

將其保存為一個單獨的 analysis_captcha.py ,然后再導入該方法,直接使用即可:

from analysis_captcha import base64_api

def analysis_captcha(filename):

'''

使用 圖鑒 商用接口來識別指定位置的驗證碼圖片

:param filename: 驗證碼圖片位置

:return : 驗證碼文本

'''

img_path = filename

img = Image.open(img_path)

result = base64_api(uname='kaibin', pwd='******', softid='4545454', img=img)

return result

驗證碼識別可能會出錯,到時候再點擊驗證碼圖片換一張,然后重來即可。

總結

以上所述是小編給大家介紹的Python +Selenium實現圖片驗證碼登錄或注冊問題,希望對大家有所幫助!

本文標題: Python +Selenium解決圖片驗證碼登錄或注冊問題(推薦)

本文地址: http://www.cppcns.com/jiaoben/python/299930.html

總結

以上是生活随笔為你收集整理的python用selenium 验证码图片_Python +Selenium解决图片验证码登录或注册问题(推荐)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。