基于GO的图片验证码识别api调用代码实例
基于GO的图片验证码识别api调用代码实例
代码描述:基于GO的图片验证码识别api调用代码实例
代码平台:聚合数据
package main
import(
"io/ioutil"
"net/http"
"net/url"
"fmt"
"encoding/json"
)
//----------------------------------
// 验证码识别调用示例代码-聚合数据
// 在线接口文档:/docs/60
//----------------------------------
const APPKEY = "*******************"//您申请的APPKEY
func main(){
//1.识别验证码
Request1()
//2.查询验证码类型代码
Request2()
}
//1.识别验证码
func Request1(){
//请求地址
juheURL :="/vercode/index"
//初始化参数
param:=url.Values{}
//配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参param.Set("key",APPKEY) //您申请到的APPKEY
param.Set("codeType","") //验证码的类型,<a href="http://www. /docs/api/id/60/aid/352" target="_blank">查询&l t;/a>
param.Set("image","") //图片文件
param.Set("dtype","") //返回的数据的格式,json或xml,默认为json
//发送请求
data,err:=Post(juheURL,param)
if err!=nil{
fmt.Errorf("请求失败,错误信息:\r\n%v",err)
}else{
var netReturn map[string]interface{}
json.Unmarshal(data,&netReturn)
if netReturn["error_code"].(float64)==0{
fmt.Printf("接口返回result字段是:\r\n%v",netReturn["result "])
}
}
}
//2.查询验证码类型代码
func Request2(){
//请求地址
juheURL :="/vercode/codeType"
//初始化参数
param:=url.Values{}
//配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参
param.Set("key",APPKEY) //您申请到的APPKEY
param.Set("dtype","") //返回的数据的格式,json或xml,默认为json
//发送请求
data,err:=Get(juheURL,param)
if err!=nil{
fmt.Errorf("请求失败,错误信息:\r\n%v",err)
}else{
var netReturn map[string]interface{}
json.Unmarshal(data,&netReturn)
if netReturn["error_code"].(float64)==0{
fmt.Printf("接口返回result字段是:\r\n%v",netReturn["result "])
}
}
}
// get 网络请求
func Get(apiURL string,params url.Values)(rs[]byte,err error){ var Url *url.URL
Url,err=url.Parse(apiURL)
if err!=nil{
fmt.Printf("解析url错误:\r\n%v",err)
return nil,err
}
//如果参数中有中文参数,这个方法会进行URLEncode
Url.RawQuery=params.Encode()
resp,err:=http.Get(Url.String())
if err!=nil{
fmt.Println("err:",err)
return nil,err
}
defer resp.Body.Close()
return ioutil.ReadAll(resp.Body)
}
// post 网络请求 ,params 是url.Values类型
func Post(apiURL string, params url.Values)(rs[]byte,err error){ resp,err:=http.PostForm(apiURL, params)
if err!=nil{
return nil ,err
}
defer resp.Body.Close()
return ioutil.ReadAll(resp.Body)
}。
api keys 认证例子
api keys 认证例子
API密钥认证是一种常见的身份验证机制,用于保护对API端
点的访问。
下面我将从多个角度给出API密钥认证的例子。
1. 例如,假设我们有一个基于REST的API,它允许用户检索
其个人资料信息。
为了保护该API免受未经授权的访问,我们可以
要求每个用户在发出请求时提供其唯一的API密钥。
这个API密钥
将被包含在HTTP请求的头部或查询参数中,并且服务器将验证密钥
的有效性,以确定用户是否被授权访问其个人资料信息。
2. 另一个例子是在开发人员使用第三方API时,他们通常需要
在其应用程序中包含API密钥以便进行身份验证。
例如,Google Maps API要求开发者使用API密钥来验证其对地图服务的访问权限。
开发者需要在其应用程序中嵌入他们的API密钥,以便他们的应用
程序可以使用Google Maps API提供的功能。
3. 另一个常见的例子是在使用Amazon Web Services (AWS)
或Microsoft Azure等云服务提供商的API时,开发者需要使用他
们的API密钥来对他们的应用程序进行身份验证和授权。
这些API
密钥可以通过云服务提供商的控制台生成,并且必须被妥善保管以
防止未经授权的访问。
总的来说,API密钥认证是一种简单而有效的身份验证机制,
它确保只有经过授权的用户或应用程序可以访问受保护的API端点。
通过在每个请求中包含唯一的API密钥,并在服务器端验证密钥的
有效性,API密钥认证帮助确保API的安全性和可靠性。
基于GO的图片验证码识别api调用代码实例
基于GO的图片验证码识别api调用代码实例代码描述:基于GO的图片验证码识别api调用代码实例代码平台:聚合数据package mainimport("io/ioutil""net/http""net/url""fmt""encoding/json")//----------------------------------// 验证码识别调用示例代码-聚合数据// 在线接口文档:/docs/60//----------------------------------const APPKEY = "*******************"//您申请的APPKEYfunc main(){//1.识别验证码Request1()//2.查询验证码类型代码Request2()}//1.识别验证码func Request1(){//请求地址juheURL :="/vercode/index"//初始化参数param:=url.Values{}//配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参param.Set("key",APPKEY) //您申请到的APPKEYparam.Set("codeType","") //验证码的类型,<a href="http://www. /docs/api/id/60/aid/352" target="_blank">查询&l t;/a>param.Set("image","") //图片文件param.Set("dtype","") //返回的数据的格式,json或xml,默认为json//发送请求data,err:=Post(juheURL,param)if err!=nil{fmt.Errorf("请求失败,错误信息:\r\n%v",err)}else{var netReturn map[string]interface{}json.Unmarshal(data,&netReturn)if netReturn["error_code"].(float64)==0{fmt.Printf("接口返回result字段是:\r\n%v",netReturn["result "])}}}//2.查询验证码类型代码func Request2(){//请求地址juheURL :="/vercode/codeType"//初始化参数param:=url.Values{}//配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参param.Set("key",APPKEY) //您申请到的APPKEYparam.Set("dtype","") //返回的数据的格式,json或xml,默认为json//发送请求data,err:=Get(juheURL,param)if err!=nil{fmt.Errorf("请求失败,错误信息:\r\n%v",err)}else{var netReturn map[string]interface{}json.Unmarshal(data,&netReturn)if netReturn["error_code"].(float64)==0{fmt.Printf("接口返回result字段是:\r\n%v",netReturn["result "])}}}// get 网络请求func Get(apiURL string,params url.Values)(rs[]byte,err error){ var Url *url.URLUrl,err=url.Parse(apiURL)if err!=nil{fmt.Printf("解析url错误:\r\n%v",err)return nil,err}//如果参数中有中文参数,这个方法会进行URLEncodeUrl.RawQuery=params.Encode()resp,err:=http.Get(Url.String())if err!=nil{fmt.Println("err:",err)return nil,err}defer resp.Body.Close()return ioutil.ReadAll(resp.Body)}// post 网络请求 ,params 是url.Values类型func Post(apiURL string, params url.Values)(rs[]byte,err error){ resp,err:=http.PostForm(apiURL, params)if err!=nil{return nil ,err}defer resp.Body.Close()return ioutil.ReadAll(resp.Body)}。
python自动化实现登录获取图片验证码功能
python⾃动化实现登录获取图⽚验证码功能主要记录⼀下:图⽚验证码1.获取登录界⾯的图⽚2.获取验证码位置3.在登录页⾯截取验证码保存4.调⽤百度api识别(⽬前准确率较⾼的识别图⽚api)本次登录的系统页⾯,可以看到图⽚验证码的位置from selenium import webdriverimport timefrom PIL import Imagebase_url = '***********'browser = webdriver.Chrome()browser.maximize_window()browser.implicitly_wait(10)browser.get(base_url)# (1)登录页⾯截图browser.save_screenshot("D:/pic.png")#可以修改保存地址# (2)基操browser.find_element_by_name("username").send_keys("gxx")browser.find_element_by_name("password").send_keys("123456")time.sleep(2)# (3)获取图⽚验证码坐标code_ele = browser.find_element_by_xpath("//*[@id='app']/div/div[1]/form/div[3]/div/div/div[2]/div/img")print("验证码的坐标为:", code_element.location)#控制台查看{'x': 1086, 'y': 368}print("验证码的⼤⼩为:", code_element.size)# 图⽚⼤⼩{'height': 40, 'width': 110}# (4)图⽚4个点的坐标位置left = code_ele.location['x']#x点的坐标top = code_ele.location['y']#y点的坐标right = code_ele.size['width']+left#上⾯右边点的坐标down = code_ele.size['height']+top#下⾯右边点的坐标image = Image.open('D:/pic.png')# (4)将图⽚验证码截取code_image = image.crop((left, top, right, height))code_image.save('D:/pic1.png')#截取的验证码图⽚保存为新的⽂件上⾯我们已经把图⽚保存到本地这就是我们截取的验证码接下来要调⽤百度ocr识别然后可以选择通⽤⽂字识别或者⾼精度版本,这个看个⼈选择,不过验证码识别还是选择⾼精度版本(也不⼀定识别的出来⼤家还是佛吧,测试的时候让开发把验证码去掉嘻嘻)⾃⼰去申请⼀个百度云账号,然后开通⽂字识别服务…就酱新建⼀个py⽂件#百度ocr提供了模板,我们直接复制就ok#下载通⽤⽂字识别的python sdk,⼀定要放在你写的代码的⽂件夹下⾯from aip import AipOcrfrom os import pathdef baiduOCR(picfile,outfile):#picfile:图⽚⽂件名 outfile:输出⽂件filename = path.basename(picfile)#图⽚名称#百度提供""" 你的 APPID AK SK """APP_ID = ''#这是你产品服务的appidAPI_KEY = ''#这是你产品服务的appkeySECRET_KEY = ''#这是你产品服务的secretkeyclient = AipOcr(APP_ID, API_KEY, SECRET_KEY)i = open(picfile, 'rb')img = i.read()print("正在识别图⽚:\t" + filename)""" 调⽤通⽤⽂字识别(⾼精度版) """message = client.basicAccurate(img)print("识别成功!")i.close()with open(outfile, 'a+') as fo:#这边是写进.txt⽂件fo.writelines("*" * 60 + '\n')#搞点花⾥胡哨的做区分fo.writelines("识别图⽚:\t" + filename + "\n" * 2)fo.writelines("⽂本内容:\n")# 输出⽂本内容for text in message.get('words_result'):#识别的内容fo.writelines(text.get('words') + '\n')fo.writelines('\n' * 2)print("⽂本导出成功!")print()if __name__ == '__main__' :outfile = 'D:/export1.txt'#保存的⽂件baiduOCR('D:/pic1.png', outfile)print('图⽚⽂本提取结束!⽂本输出结果位于 %s ⽂件中。
python 本地识别验证码代码
识别验证码通常是一个复杂的过程,因为验证码通常被设计成能够区分计算机程序和人类用户。
然而,有一些验证码可能相对容易通过机器学习或深度学习模型来识别。
下面是一个基本的例子,它使用Python的opencv库来识别验证码。
这个例子仅仅是一个简单的演示,并不能处理所有类型的验证码。
```pythonimport cv2import numpy as np# 读取图片img = cv2.imread('captcha.png', 0)# 二值化处理_, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)# 查找轮廓contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 遍历轮廓,尝试匹配每个字符for contour in contours:# 计算轮廓的边界框x, y, w, h = cv2.boundingRect(contour)# 提取字符图像char_img = img[y:y+h, x:x+w]# 尝试识别字符# 这里我们只是简单地将其转换为灰度图像并查找边界框gray = cv2.cvtColor(char_img, cv2.COLOR_BGR2GRAY)_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)if len(contours) > 0:# 如果找到轮廓,假设字符是字母或数字char = ''for cnt in contours:if cv2.contourArea(cnt) > 50:char = 'a' + str(len(char))else:char = '0' + str(len(char))print(char)```这个代码假设每个字符都是一个简单的形状,并且可以通过查找轮廓来识别。
使用Go语言进行人脸识别与人脸检测的方法与工具介绍
使用Go语言进行人脸识别与人脸检测的方法与工具介绍人脸识别与人脸检测是当今计算机视觉领域具有重要影响力的研究方向之一。
随着人工智能的发展,人脸识别与人脸检测的应用场景越来越广泛,涵盖了安全监控、人脸支付、人脸门禁等多个领域。
本文将介绍使用Go语言进行人脸识别与人脸检测的方法与工具。
首先,针对人脸识别与人脸检测任务,我们需要找到一个高效、准确的算法。
近年来,深度学习技术在人脸识别与人脸检测领域取得了巨大的突破。
目前最常用的深度学习框架之一是TensorFlow,而Go语言中有一个基于TensorFlow的开源库叫做GoCV,它提供了一系列用于图像处理与计算机视觉的工具函数和接口。
使用GoCV,我们可以轻松地进行人脸识别与人脸检测任务。
其次,人脸识别与人脸检测的方法通常分为两个步骤:人脸检测和人脸识别。
在人脸检测阶段,我们需要将输入的图像中的人脸位置标注出来;在人脸识别阶段,我们需要对标注出来的人脸进行特征提取和比对。
对于人脸检测,GoCV提供了一个名为Haar级联分类器的工具,它可以用来检测人脸的位置。
而人脸识别,则可以使用深度学习模型,例如FaceNet或VGGFace等。
这些模型可以将人脸图像转换为具有较高区分度的特征向量,并可以通过计算特征向量之间的距离来进行人脸比对。
另外,在实际的人脸识别与人脸检测应用中,我们还需要考虑一些实际问题,例如图像质量、人脸姿态、光照条件等。
对于图像质量问题,我们可以使用一些图像增强的算法,例如直方图均衡化、高斯模糊等,来提高输入图像的质量。
对于人脸姿态和光照条件问题,我们可以引入一些先进的模型,例如3D人脸姿态估计模型和光照归一化模型,来提高人脸识别与人脸检测的准确性和鲁棒性。
除了GoCV之外,还有其他一些在Go语言中进行人脸识别与人脸检测的工具和库。
例如,Pigo是一个基于Go语言的人脸检测工具,它使用了一种名为卡斯卡德级联分类器的算法来进行人脸检测。
此外,Dlib也是一个很流行的计算机视觉库,它提供了一些用于人脸识别和人脸检测的函数和模型。
go mockapi实现方式
GoMock是一个用于Go语言的mocking框架,可以帮助您模拟函数调用并验证它们的行为。
下面是一个简单的示例,演示如何使用GoMock实现mock API:首先,您需要安装GoMock:shell复制代码go get github/golang/mock/mockgen然后,假设您有一个名为api的包,其中包含一些函数和类型。
您可以使用mockgen工具生成mock的相关代码。
运行以下命令:shell复制代码mockgen -source=<source.go> -destination=**.go -package=<pkg>其中,<source.go>是包含原始代码的Go源文件,<pkg>是包名。
生成的mock代码将包含一个与原始类型对应的mock类型,以及一些用于模拟函数调用的方法。
您可以在测试中使用这些mock对象来模拟API的行为。
以下是一个简单的示例,演示如何使用GoMock模拟API的GET请求:go复制代码package mainimport ("fmt""net/http""testing""github/golang/mock/gomock""github/stretchr/testify/assert")type API struct {client *http.Client}func(a *API) GetUser(id string) (*User, error) {resp, err := a.client.Get(fmt.Sprintf("/users/%s", id))if err != nil {return nil, err}defer resp.Body.Close()// ... handle response ...}func TestAPI_GetUser(t *testing.T) {ctrl := gomock.NewController(t)defer ctrl.Finish()mockClient := NewMockClient(ctrl)api := API{client: mockClient}mockClient.EXPECT().Get("/users/123").Return(&http.Response{}, nil)user, err := api.GetUser("123")assert.NoError(t, err)assert.NotNil(t, user) // ... assert user properties ...}在上面的示例中,我们创建了一个名为API的结构体,其中包含一个client字段,该字段是http.Client类型的实例。
picgo的api请求模板
随着互联网的发展,API已经成为许多应用程序和平台之间进行数据交换和交互的重要方式。
在这个背景下,picgo作为一款流行的图像处理工具,也提供了一系列API接口供用户使用。
本文将介绍picgo的API请求模板,帮助开发者更好地了解和使用这些接口。
一、API请求的基本概念API请求是应用程序接口的请求,通过发送HTTP请求到特定的URL,可以实现与服务器之间的数据交换。
在picgo中,API请求主要用于图像处理相关的功能,如图片上传、图片缩放、图片裁剪等。
以下是一个简单的picgoAPI请求模板:```pythonimportpicgoapi_key='your_api_key'api_secret='your_api_secret'client=picgo.Client(api_key,api_secret)#发送API请求response=client.upload_image('path/to/image.jpg')#处理API响应ifresponse.status_code==200:image_id=response.json()['image_id']#执行其他操作,如缩放、裁剪等else:#处理错误情况print(f"API请求失败,状态码:{response.status_code}")print(f"详细错误信息:{response.text}")```说明:*首先需要导入picgo模块。
*然后设置API密钥和密钥对应的密钥秘钥。
*创建一个picgo客户端对象,用于发送API请求。
*使用`upload_image`方法上传图片,并获取返回的图像ID。
*根据返回的状态码和信息,处理API响应。
如果请求成功,可以执行其他操作,如缩放、裁剪等;如果请求失败,需要处理错误情况。
三、API请求的其他用法除了上述基本的用法,picgo还提供了其他一些常用的API请求方法,如缩放图片、裁剪图片、获取图像信息等。
Go-统一定义API错误码-Gin开发
Go-统⼀定义API错误码-Gin开发转载于https:///s/gTFfUN2LEcsF0Q8iQan82A改之前在使⽤ gin 开发接⼝的时候,返回接⼝数据是这样写的。
type response struct {Code int `json:"code"`Msg string `json:"msg"`Data interface{} `json:"data"`}// always return http.StatusOKc.JSON(http.StatusOK, response{Code: 20101,Msg: "⽤户⼿机号不合法",Data: nil,})这种写法 code、msg 都是在哪需要返回在哪定义,没有进⾏统⼀管理。
改之后// ⽐如,返回“⽤户⼿机号不合法”错误c.JSON(http.StatusOK, errno.ErrUserPhone.WithID(c.GetString("trace-id")))// 正确返回c.JSON(http.StatusOK, errno.OK.WithData(data).WithID(c.GetString("trace-id")))errno.ErrUserPhone、errno.OK 表⽰⾃定义的错误码,下⾯会看到定义的地⽅。
.WithID() 设置当前请求的唯⼀ID,也可以理解为链路ID,忽略也可以。
.WithData() 设置成功时返回的数据。
下⾯分享下编写的 errno 包源码,⾮常简单,希望⼤家不要介意。
errno 包源码// errno/errno.gopackage errnoimport ("encoding/json")var _ Error = (*err)(nil)type Error interface {// i 为了避免被其他包实现i()// WithData 设置成功时返回的数据WithData(data interface{}) Error// WithID 设置当前请求的唯⼀IDWithID(id string) Error// ToString 返回 JSON 格式的错误详情ToString() string}type err struct {Code int `json:"code"` // 业务编码Msg string `json:"msg"` // 错误描述Data interface{} `json:"data"` // 成功时返回的数据ID string `json:"id,omitempty"` // 当前请求的唯⼀ID,便于问题定位,忽略也可以}func NewError(code int, msg string) Error {return &err{Code: code,Msg: msg,Data: nil,}}func (e *err) i() {}func (e *err) WithData(data interface{}) Error {e.Data = datareturn e}func (e *err) WithID(id string) Error {e.ID = idreturn e}// ToString 返回 JSON 格式的错误详情func (e *err) ToString() string {err := &struct {Code int `json:"code"`Msg string `json:"msg"`Data interface{} `json:"data"`ID string `json:"id,omitempty"`}{Code: e.Code,Msg: e.Msg,Data: e.Data,ID: e.ID,}raw, _ := json.Marshal(err)return string(raw)}// errno/code.gopackage errnovar (// OKOK = NewError(0, "OK")// 服务级错误码ErrServer = NewError(10001, "服务异常,请联系管理员")ErrParam = NewError(10002, "参数有误")ErrSignParam = NewError(10003, "签名参数有误")// 模块级错误码 - ⽤户模块ErrUserPhone = NewError(20101, "⽤户⼿机号不合法")ErrUserCaptcha = NewError(20102, "⽤户验证码有误")// ...)错误码规则- 错误码需在 code.go ⽂件中定义。
记录一次谷歌人机验证码破解过程
记录⼀次⾕歌⼈机验证码破解过程前⾔ 哈喽,各位⼩伙伴,你们好呀,今天呢,咱们来说⼀下google,我们都知道,google是⽬前地表最强的搜索引擎了,我们可以借助google庞⼤的搜索资源找到⼀些⾃⼰想要的资源,可能是⼀些收费电影,可能是⼀些奇门⼩说,可能是某个⾓落的种⼦,不管怎么说,google搜索还是挺给⼒的,但是呢,有梯⼦的我们可能都遇到过,我们搜索的多了,会有这种情况 这种验证码呢,叫做ReCaptcha验证码,相对来说,是⽐较繁琐的验证码之⼀ 当然了,ReCaptcha不⽌⾕歌⼀家再⽤,国外的⽹站很多都是使⽤这种验证码,但是在国内不多,因为在国内⽐较容易被墙,所以⽤的少,但是我们是⾼端玩家,在⾃由的internet中,我们怎么可能只局限于国内,下⾯,我们就针对ReCaptcha验证码破解 ⾕歌提供的范例,实际⽹站验证码和这个⼀模⼀样 ReCaptcha验证码样式为什么使⽤第三⽅平台 嗯,看到这可能有⼈会对我不屑⼀顾,说辣鸡才会⽤第三⽅平台,要是按照技术来划分的话,我真的辣鸡,哈哈 但是这⾥要抬杠⼀下,并不是说⽤第三⽅平台就是辣鸡,我们可以想象⼀下,如果是滑动验证码,我们当然有⼀试的能⼒,python可以调⽤OpenCV,看看⽂档,当然是可以实现了,但是有个问题是,你可能针对的⼀个⽹站的滑动验证识别好了,但是可能每个⽹站的滑动验证码都不太⼀样,在⽤OpenCV识别的时候,可能就会识别率低的情况,要是在公司,⼀直完不成任务,嗯,,,等着被炒鱿鱼吧,再说,像⾕歌⼈机个⼈也解决不了,没有NB的机器学习是不可能的,所以只能⽤第三⽅平台,毕竟,完成任务才是⾸要任务为什么推荐2captcha平台 我们先说⼀下现在打码平台机制都有哪些 第⼀种呢,就是打码平台训练好各种各样的数据,⽐如,哪些是花,哪些是车,然后我们把图⽚发送给打码平台,他给我们结果,但是这样会有个问题,如果训练的不好,我们这边的结果也是很不好的,各种不准确,影响效果 第⼆种呢,就是平台雇⼈,我们把整个验证码都给打码平台,平台找⼈帮助我们点击,然后把结果给我们,我们在登录了或者做其他 我们可以看出来,肯定是第⼆种更加灵活地,现在阶段,机器再NB,⾄少在验证码上准确率还是不如⼈的 2captcha平台⽬前采⽤的就是第⼆种⽅式,赚取的是中间差价,但是识别率是我⽤过最⾼的,曾经因为选错了平台,⼀直不成功,加班加点,⿏标都被我砸坏了,唉,所以,选择⼀个合适的平台还是很重要的所需⼯具 Chromedriver:浏览器驱动,可以理解为⼀个没有界⾯的chrome浏览器 Selenium:⽤于模拟⼈对浏览器进⾏点击、输出、拖拽等操作,就相当于是个⼈在使⽤浏览器,也常常⽤来应付反爬⾍措开始⾏动 既来之则安之,选择了2captcha,就要看看⼈家的官⽹啦 打开官⽹ 嗯...纯英⽂,我也看不懂..怎么办呢,别着急,我带你们⼀步⼀步分析主要功能 登录账号 登录完成后,会⾃动跳到主页 第⼀个红⾊圈起来的地⽅表⽰剩余多少钱,没有钱的话记得要氪⾦,否则是不能⽤滴,氪⾦过程这⾥就不多做解释了哈,问题不⼤ 第⼆个红⾊圈起来的地⽅表⽰这是你的唯⼀key,每次请求要带上这个key的,所以要保管好 进⼊主题,研究⽂档 点击红⾊圈的地⽅,API,⼀般API都是⽂档,let's go En....什么玩意..完全看不懂,别慌,往下滑 滑到rates,我们知道,⾕歌⼈机是ReCaptcha,但是三个呢,到底是哪个呢,我就来带⼤家看看 ⾸先点击ReCaptcha(oldmethod),这个是⽼的⽅法,咱也不知道唉,所以就先看看这个吧,从浅到深嘛,这⾥呢,我都直接翻译了⼀下,⽅便我们观看 Look,⼈家也说了,旧⽅法解决ReCaptcha准确率⽐较低,建议使⽤新⽅法,那我们就点击新⽅法去看看 我们找到了,这种属于ReCaptcha v2验证码,确实和⾕歌⼈机挺⼀样的,我们来看⼀下⽂档是怎么写的 然后找到id=g-recaptcha-response的textarea标签,将display:none 这个css删除 将给我们字符串添加到textarea输⼊框点击提交,就完成了 是不是很简单,我们也来试⼀下 打开⾕歌的⽰例样式 我们打开开发者⼯具,搜索data-sitekey,可以看到,真的有⼀个 我们赋值⼀下这个data-sitekey,并且⽤代码获取到最后的结果 然后我们找到 id=g-recaptcha-response 的textarea标签,将他的display属性删除 但是有点不太对 我们的 2captcha的⽰例的 我们可以看到,2captcha是个删除display之后,textarea框是直接展⽰出来的,但是我们删除display之后,基本没⽤丝毫动静,这... 别着急,⼈家都想到了,我们往下滑滑 既然我们不能直接显⽰出来textarea,那就说明我们是隐式的ReCaptcha验证码,其实他的原理呀,也挺简单 如果你学过⼀些前端,会些js,你可能就会想到,虽然我看不到这个textarea,但是通过js我们仍然能更改textarea的数据,只是说,我们⿏标点击不了⽽已,⼈家也说了,看第⼀个红圈的位置,通过此js,我们我们就可以把向2captcha获取的值赋值上,第⼆个圈js是提交表单,其实就是我们⼈点击提交⽽已,只不过是js代码帮我们完成了,这样,我们也完成了⼀个偷天换⽇⼩试⽜⼑ 好嘞,我们就先来⼿动搞⼀下,在上述中,我们已经根据data-sietkey拿到了最后的结果,显然,我们只能通过js完成,那么,我们就试⼀下 通过上述gif看到,我们通过js,确实绕过了点击车辆识别了,其他识别,确实⽅便, 但是我们不可能通过⼈每次这样搞呀,但是因为牵扯到了执⾏js,所以只能使⽤selenium,所以,我们来看⼀下selenium上的效果吧 Look,这样,我们就针对⾕歌⼈机(ReCaptcha)验证码,完成了⾃动登录,如果爬取国外的某某⽹站时,如果遇到了ReCaptcha,我相信⼀定会对你有帮助 完整代码import timefrom selenium import webdriverfrom selenium.webdriver.chrome.webdriver import WebDriverimport requests# 常量driver: WebDriverUSER = {}API_KEY = "xxxxxxxxxxxxxxx"# 初始化def init():global driverdriver = webdriver.Chrome("chromedriver.exe", desired_capabilities=None)def open_google():driver.get("https:///recaptcha/api2/demo")data_sitekey = driver.find_element_by_xpath('//*[@id="recaptcha-demo"]').get_attribute("data-sitekey")# iframe_src = driver.find_element_by_xpath('//*[@id="recaptcha-demo"]/div/div/iframe').get_attribute("src")# iframe_k = url_params_format(iframe_src).get("k")print(data_sitekey)page_url = "https:///recaptcha/api2/demo"# print(iframe_k)u1 = f"https:///in.php?key={API_KEY}&method=userrecaptcha&googlekey={data_sitekey}&pageurl={page_url}&json=1&invisible=1" r1 = requests.get(u1)print(r1.json())rid = r1.json().get("request")u2 = f"https:///res.php?key={API_KEY}&action=get&id={int(rid)}&json=1"time.sleep(25)while True:print(u2)r2 = requests.get(u2)print(r2.json())if r2.json().get("status") == 1:form_tokon = r2.json().get("request")breaktime.sleep(5)wirte_tokon_js = f'document.getElementById("g-recaptcha-response").innerHTML="{form_tokon}";'submit_js = 'document.getElementById("recaptcha-demo-form").submit();'driver.execute_script(wirte_tokon_js)time.sleep(1)driver.execute_script(submit_js)if__name__ == '__main__':init()open_google()Code 谢谢观看,谢谢⽀持。
使用Go语言进行图像识别与处理的方法与工具介绍
使用Go语言进行图像识别与处理的方法与工具介绍Go语言(Golang)作为一种开源编程语言,已经在图像识别和处理领域得到广泛应用。
它的高性能、并发性、简洁的语法以及开发便捷性使得它成为图像处理的强大工具。
本文将介绍使用Go语言进行图像识别与处理的方法和常用工具。
首先,我们来介绍一些常用的Go语言图像处理库。
这些库提供了丰富的函数和工具,方便我们进行图像处理的开发和优化。
1. GoCV:GoCV是一个基于OpenCV的图像处理库,它提供了一个简单易用的接口,能够在Go语言中进行图像处理和计算机视觉任务。
GoCV支持各种图像处理功能,包括图像滤波、边缘检测、图像分割等。
同时,它还支持机器学习和深度学习功能,可以进行人脸识别、目标检测等高级图像处理技术。
2. imaging:imaging是一个轻量级的Go语言图像处理库,它提供了一系列简单易用的函数,可以进行图像缩放、裁剪、旋转和滤镜等常见的图像处理操作。
imaging适用于对图像进行简单处理和操作的场景,它的代码简洁,易于理解和扩展。
除了图像处理库,Go语言还有一些优秀的图像识别和机器学习库,可以帮助我们进行图像识别任务。
1. GoTensor:GoTensor是一个强大的张量处理库,它提供了丰富的张量操作函数,可以进行矩阵运算、卷积和池化等常用的图像处理操作。
GoTensor支持GPU 加速,可以大幅提升图像处理和神经网络训练的速度。
2. gocv-text:gocv-text是一个基于GoCV的OCR(光学字符识别)库,它可以识别图片中的文字并输出识别结果。
gocv-text支持多种语言的文字识别,可以应用于自动化文本处理、图像检索和机器人视觉等场景。
一旦选定了适合自己需求的图像处理库,我们就可以开始进行图像处理的开发了。
下面是使用Go语言进行图像处理的一般步骤:1. 读取图像:使用图像处理库提供的函数,将图像从文件或者网络中读取到内存中。
读取后的图像可以表示为二维的像素矩阵。
