当前位置: 首页 > news >正文

验证码:EasyDL 机器学习识别与云码平台一站式识别

目录

EasyDL 机器学习识别(实践:京东商城)

(一)批量获取验证码图片

(二)EasyDL机器学习(百度智能云)

(三)调用EasyDLAPI接口识别验证码

云码平台一站式识别(实战:豆瓣网)

(一)获取验证码图片

(二)验证码识别

(三)动态获取验证码


EasyDL 机器学习识别(实践:京东商城)

(一)批量获取验证码图片

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
import time
import requestsservice = Service(executable_path="../_resources/chromedriver")
driver = webdriver.Chrome(service=service)
driver.get("https://passport.jd.com/uc/login")select = driver.find_element(By.XPATH, '/html/body/div[2]/div[2]/div[1]/div/div[3]/a')
select.click()username = driver.find_element(By.XPATH, '//*[@id="loginname"]')
ActionChains(driver).pause(0.5).click(username).send_keys("xxxxxxxxxx").parform()password = driver.find_element(By.XPATH, '//*[@id="nloginpwd"]')
ActionChains(driver).pause(0.5).click(password).send_keys("xxxxxxxxxx").parform()submit = driver.find_element(By.XPATH, '//*[@id="loginsubmit"]')
submit.click()for i in range(30):time.sleep(1)img = driver.find_element(By.XPATH, '/html/body/div[4]/div/div/div/div[1]/div[2]/div[1]/img')img.screenshot("./img/{}.png".format(i))time.sleep(0.5)refresh = driver.find_element(By.XPATH, '/html/body/div[4]/div/div/div/div[1]/div[2]/div[2]')refresh.click()time.sleep(3)
driver.quit()

(二)EasyDL机器学习(百度智能云)

(1)EasyDL零门槛AI开发平台-立即使用-物体检测(图像)

(2)创建模型:填写模型名称(自定义例如:myModel)+业务描述(自定义例如:Captcha Recognition)+完成创建

(3)数据总览中的创建数据集:填写数据集名称(自定义例如:myModelData)+完成

(4)数据总览中在上述数据集中:点击导入+无标注信息+导入方式:本地导入+上传图片(刚才代码抓取的所有图片)+确认并返回

(4)导入成功后在线标注:右上角添加标签(自定义例如:Target)后确定+标注每个图片的黑色区域即滑块移动位置

(5)标注好后训练模型:选择模型名称+添加数据集+公有云部署+开始训练+等待训练结束+查看模型效果+申请发布

(6)发布模型:公有云部署+提交申请

(三)调用EasyDLAPI接口识别验证码

(1)在上述模型中点击服务详情+查看API文档+点击EasyDL版控制台+公有云部署:应用列表+点击创建应用+输入应用名称+选择接口EasyDL+立即创建+获得此应用的API KEY和Secret Key

(2)再次来到API文档:导航栏中:模型发布-公有云部署-物体检测API调用文档中的复制代码创建新py文件修改代码如下:(通过main.png来测试)

import json
import base64
import requestsIMAGE_FILEPATH = "./img/main.png"PARAMS = {"threshold": 0.3}# 服务详情 中的 接口地址
MODEL_API_URL = "【您的API地址】"# 调用 API 需要 ACCESS_TOKEN。若已有 ACCESS_TOKEN 则于下方填入该字符串
# 否则,留空 ACCESS_TOKEN,于下方填入 该模型部署的 API_KEY 以及 SECRET_KEY,会自动申请并显示新 ACCESS_TOKEN
# ACCESS_TOKEN = "【您的ACESS_TOKEN】"
ACCESS_TOKEN = None
API_KEY = "【您的API_KEY】"
SECRET_KEY = "【您的SECRET_KEY】"print("1. 读取目标图片 '{}'".format(IMAGE_FILEPATH))
with open(IMAGE_FILEPATH, 'rb') as f:base64_data = base64.b64encode(f.read())base64_str = base64_data.decode('UTF8')
print("将 BASE64 编码后图片的字符串填入 PARAMS 的 'image' 字段")
PARAMS["image"] = base64_strif not ACCESS_TOKEN:print("2. ACCESS_TOKEN 为空,调用鉴权接口获取TOKEN")auth_url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials"               "&client_id={}&client_secret={}".format(API_KEY, SECRET_KEY)auth_resp = requests.get(auth_url)auth_resp_json = auth_resp.json()ACCESS_TOKEN = auth_resp_json["access_token"]print("新 ACCESS_TOKEN: {}".format(ACCESS_TOKEN))
else:print("2. 使用已有 ACCESS_TOKEN")print("3. 向模型接口 'MODEL_API_URL' 发送请求")
request_url = "{}?access_token={}".format(MODEL_API_URL, ACCESS_TOKEN)
response = requests.post(url=request_url, json=PARAMS)
response_json = response.json()
response_str = json.dumps(response_json, indent=4, ensure_ascii=False)
print("结果:
{}".format(response_str))

云码平台一站式识别(实战:豆瓣网)

(一)获取验证码图片

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
import time
import requestsservice = Service(executable_path="../_resources/chromedriver")
driver = webdriver.Chrome(service=service)
driver.get("https://www.douban.com/")
time.sleep(2)frame = driver.find_element(By.XPATH, '//*[@id="anony-reg-new"]/div/div[1]/iframe')
driver.switch_to.frame(frame)
time.sleep(0.5)select = driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/ul[1]/li[2]')
select.click()username = driver.find_element(By.XPATH, '//*[@id="username"]')
ActionChains(driver).pause(0.5).click(username).send_keys("xxxxxxxxxx").parform()password = driver.find_element(By.XPATH, '//*[@id="password"]')
ActionChains(driver).pause(0.5).click(password).send_keys("xxxxxxxxxx").parform()submit = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div[1]/div[5]/a')
submit.click()time.sleep(2)
driver.switch_to.frame("tcaptcha_iframe_dy")img = driver.find_element(By.XPATH, '//*[@id="slideBg"]')
img.screenshot("./img2/captcha.png")time.sleep(3)
driver.quit()

(二)验证码识别

云码-自动验证码识别平台:在线测试:点击单图滑块(截图)-上传刚获取的验证码图片-点击测试

以下为通过代码实现方法:登陆账号成功后点击个人中心-点击开发文档-点击python

修改文档代码如下(新建py文件名称为:ydm.py):

注意根据个人情况修改token

import json
import timeimport requests
import base64class YdmVerify(object):_custom_url = "http://api.jfbym.com/api/YmServer/customApi"_token = ""_headers = {'Content-Type': 'application/json'}def common_verify(self, image, verify_type="60000"):# 数英汉字类型# 通用数英1-4位 10110# 通用数英5-8位 10111# 通用数英9~11位 10112# 通用数英12位及以上 10113# 通用数英1~6位plus 10103# 定制-数英5位~qcs 9001# 定制-纯数字4位 193# 中文类型# 通用中文字符1~2位 10114# 通用中文字符 3~5位 10115# 通用中文字符6~8位 10116# 通用中文字符9位及以上 10117# 定制-XX西游苦行中文字符 10107# 计算类型# 通用数字计算题 50100# 通用中文计算题 50101# 定制-计算题 cni 452payload = {"image": base64.b64encode(image).decode(),"token": self._token,"type": verify_type}print(payload)resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))print(resp.text)return resp.json()['data']['data']def slide_verify(self, slide_image, background_image, verify_type="20101"):# 滑块类型# 通用双图滑块  20111payload = {"slide_image": base64.b64encode(slide_image).decode(),"background_image": base64.b64encode(background_image).decode(),"token": self._token,"type": verify_type}resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))print(resp.text)return resp.json()['data']['data']def sin_slide_verify(self, image, verify_type="20110"):# 通用单图滑块(截图)  20110payload = {"image": base64.b64encode(image).decode(),"token": self._token,"type": verify_type}resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))print(resp.text)return resp.json()['data']['data']def traffic_slide_verify(self, seed, data, href, verify_type="900010"):# 定制-滑块协议slide_traffic  900010payload = {"seed": seed,"data": data,"href": href,"token": self._token,"type": verify_type}resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))print(resp.text)return resp.json()['data']['data']def click_verify(self, image, label_image=None, extra=None, verify_type="30100"):# 通用任意点选1~4个坐标 30009# 通用文字点选1(extra,点选文字逗号隔开,原图) 30100# 定制-文字点选2(extra="click",原图) 30103# 定制-单图文字点选 30102# 定制-图标点选1(原图) 30104# 定制-图标点选2(原图,extra="icon") 30105# 定制-语序点选1(原图,extra="phrase") 30106# 定制-语序点选2(原图) 30107# 定制-空间推理点选1(原图,extra="请点击xxx") 30109# 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110# 定制-tx空间点选(extra="请点击侧对着你的字母") 50009# 定制-tt_空间点选 30101# 定制-推理拼图1(原图,extra="交换2个图块") 30108# 定制-xy4九宫格点选(原图,label_image,image) 30008payload = {"image": base64.b64encode(image).decode(),# "label_image": base64.b64encode(label_image).decode(),"token": self._token,"type": verify_type}if extra:payload['extra'] = extraresp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))print(resp.text)return resp.json()['data']['data']def rotate(self, out_ring_image, inner_circle_image):# 定制-X度单图旋转  90007# payload = {#     "image": base64.b64encode(image).decode(),#     "token": self._token,#     "type": "90007"# }# 定制-Tt双图旋转,2张图,内圈图,外圈图  90004payload = {"out_ring_image": base64.b64encode(out_ring_image).decode(),"inner_circle_image": base64.b64encode(inner_circle_image).decode(),"token": self._token,"type": "90004"}resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))print(resp.text)return resp.json()['data']['data']def google_verify(self, googlekey, pageurl, invisible=1, data_s=""):_headers = {'Content-Type': 'application/json'}"""第一步,创建验证码任务:param:return taskId : string 创建成功的任务ID"""url = "http://122.9.52.147/api/YmServer/funnelApi"payload = json.dumps({"token": self._token,# "type": "40011", ## v3"type": "40010",  ## v2"googlekey": googlekey,"enterprise": 1,  ## 是否为企业版"pageurl": pageurl,"invisible": invisible,"data-s": data_s,# 'action':"TEMPLATE" #V3必传})# 发送JSON格式的数据result = requests.request("POST", url, headers=_headers, data=payload).json()print(result)# {'msg': '识别成功', 'code': 10000, 'data': {'code': 0, 'captchaId': '51436618130', 'recordId': '74892'}}captcha_id = result.get('data').get("captchaId")record_id = result.get('data').get("recordId")times = 0while times < 150:try:url = f"http://122.9.52.147/api/YmServer/funnelApiResult"data = {"token": self._token,"captchaId": captcha_id,"recordId": record_id}result = requests.post(url, headers=_headers, json=data).json()print(result)# {'msg': '结果准备中,请稍后再试', 'code': 10009, 'data': []}if result['msg'] == "结果准备中,请稍后再试":time.sleep(5)times += 5continueif result['msg'] == '请求成功' and result['code'] == 10001:print(result['data']['data'])return result['data']['data']# {'msg': '请求成功', 'code': 10001, 'data': {'data': '03AGdBq2611GTOgA2v9HUpMMEUE70p6dwOtYyHJQK4xhdKF0Y8ouSGsFZt647SpJvZ22qinYrm6MYBJGFQxMUIApFfSBN6WTGspk6DmFdQAoWxynObRGV7qNMQOjZ_m4w3_6iRu8SJ3vSUXH_HHuA7wXARJbKEpU4J4R921NfpKdahgeFD8rK1CFYAqLd5fz4l-8_VRmRE83dRSfkgyTN338evQ1doWKJRipZbk4ie-89Ud0KGdOsP4QzG3stRZgj2oaEoMDSAP62vxKGYqtDEqTcwtlgo-ot3rF5SmntaoKGwcKPo0NrekWA5gtj0vqKLU6lY2GcnSci_tgBzBwuH40uvyR1PFu02VK_E44mopJ7FOO4cUukNaLGqypU2YCA8QuaaebOIoCMU7RGqGs_41RYNCG1GSdthiwcwk2hHFbi-TXuICXSwh4Er5mgVW9A3t_9Ndp0eJcyr3HtuJrcA7BtlcgruuQxK5h4Ew4ert4KPH_aQGN9ww5VsUtbSManzUDnUOs7aEdvFk1DOOPmLys-aX20ZFN2CcQcZZSO-7HZpZZt3EDeWWE5S02HFDY8gl3_0xqIts8774Tr4GMVJaddG0NR6pcBFC11FqNcK2a18gM3gaKDy3_2ZMeSU4nj4NWwoAhPjQN2BS8JxX4kKVpX4rD959kc93vczVD3TYD6_4GJahGSpBvM7Y5_GGIdLL8imXde1R35mZnEcFYXQ40zcy3DdJFkk_gzGTVOEb1Q1IZpjMxzCxyGgwjgL9dtDIgst5H5CSZoerX_Lz-DmsBvYIYZdpbPLEMROx9MODImaEw8Cp6M8Xj7_foijiGE9hh-pzJSTlKl3HytiSUyJJ7r1BssrX5C_TFWxl0IXNg8azP8H-ZIOWwnYlMWCS1w9piHdoLg5zACiYIN3Txdlsvi61MuPmzJggJd1_dlyMdAlzb5_zdfweqj0_Ko1ODP378YT7sV7LECgRj5QJU6sF5nlf4m2g5sFypBw9GFAkEE-OaWGYxRJOy2ioU41ggAJIkcza2B_N5AL2KLROtm0-c2MxplM4ZzHxrUv9A24zlgzo3Pz4NONwU_gaOcDB7j1dZKXD8UaoIrZv0BTd8JeojYowm9Usdg7Rt4Fpo_vDLJdrEUfbxVlXieDD9Fr1fu72-d4AduT_J3n-rIhyX4gFav-KfP-qOxqOZsmjXZirsBxZs7042NYeirRYnLv35cxIAJARz03FJmeKViUivwC5mCWw64hjRad9XyyBOP2n8KFOrTXhPskC-WwEfksGtfLxi6VW76FHGvRdwHXzMwVfNqe3P5H_WZUc-vxeTAsTnqZz3WA97lM4MLrX0nTZYgXxCEiS6raSOiEMqcx_Nv7Zxre-abj4LZRbFpH8nx1SEiaOV2Dm-a1iPFEmCs0L4kDtt6VImSVIQaTOAd3KFSo7W_XTvRPsQJOtblrcKyuagztX_Yr0lT0YqN9I9MZAARo7M5OfwSLJW16rdmp4NuRefEvNPNHO2cVh1Xha1qNGuF_QDvWFFmWG0Y6IbRqLmF-Dv8BY4TWyOeVnADJftGQw2QSr8RmbCHryA'}}except Exception as e:print(e)continuedef fun_captcha_verify(self, publickey, pageurl, verify_type="40007"):# 定制类接口-Hcaptcha 40007payload = {"publickey": publickey,"pageurl": pageurl,"token": self._token,"type": verify_type}resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))print(resp.text)return resp.json()['data']['data']def hcaptcha_verify(self):# 定制类接口-Hcaptcha_headers = {'Content-Type': 'application/json'}_custom_url = "http://api.jfbym.com/api/YmServer/funnelApi"payload = {"sitekey": "","pageurl": "","token": self._token,"type": '50013'}result = requests.post(_custom_url, headers=_headers, data=json.dumps(payload)).json()print(result)captcha_id = result.get('data').get("captchaId")record_id = result.get('data').get("recordId")times = 0while times < 150:try:url = f"http://api.jfbym.com/api/YmServer/funnelApiResult"data = {"token": self._token,"captchaId": captcha_id,"recordId": record_id}result = requests.post(url, headers=_headers, json=data).json()print(result)# {'msg': '结果准备中,请稍后再试', 'code': 10009, 'data': []}if result['msg'] == "结果准备中,请稍后再试":time.sleep(5)times += 5continueif result['msg'] == '请求成功' and result['code'] == 10001:print(result['data']['data'])return result['data']['data']# {'msg': '请求成功', 'code': 10001, 'data': {'data': '03AGdBq2611GTOgA2v9HUpMMEUE70p6dwOtYyHJQK4xhdKF0Y8ouSGsFZt647SpJvZ22qinYrm6MYBJGFQxMUIApFfSBN6WTGspk6DmFdQAoWxynObRGV7qNMQOjZ_m4w3_6iRu8SJ3vSUXH_HHuA7wXARJbKEpU4J4R921NfpKdahgeFD8rK1CFYAqLd5fz4l-8_VRmRE83dRSfkgyTN338evQ1doWKJRipZbk4ie-89Ud0KGdOsP4QzG3stRZgj2oaEoMDSAP62vxKGYqtDEqTcwtlgo-ot3rF5SmntaoKGwcKPo0NrekWA5gtj0vqKLU6lY2GcnSci_tgBzBwuH40uvyR1PFu02VK_E44mopJ7FOO4cUukNaLGqypU2YCA8QuaaebOIoCMU7RGqGs_41RYNCG1GSdthiwcwk2hHFbi-TXuICXSwh4Er5mgVW9A3t_9Ndp0eJcyr3HtuJrcA7BtlcgruuQxK5h4Ew4ert4KPH_aQGN9ww5VsUtbSManzUDnUOs7aEdvFk1DOOPmLys-aX20ZFN2CcQcZZSO-7HZpZZt3EDeWWE5S02HFDY8gl3_0xqIts8774Tr4GMVJaddG0NR6pcBFC11FqNcK2a18gM3gaKDy3_2ZMeSU4nj4NWwoAhPjQN2BS8JxX4kKVpX4rD959kc93vczVD3TYD6_4GJahGSpBvM7Y5_GGIdLL8imXde1R35mZnEcFYXQ40zcy3DdJFkk_gzGTVOEb1Q1IZpjMxzCxyGgwjgL9dtDIgst5H5CSZoerX_Lz-DmsBvYIYZdpbPLEMROx9MODImaEw8Cp6M8Xj7_foijiGE9hh-pzJSTlKl3HytiSUyJJ7r1BssrX5C_TFWxl0IXNg8azP8H-ZIOWwnYlMWCS1w9piHdoLg5zACiYIN3Txdlsvi61MuPmzJggJd1_dlyMdAlzb5_zdfweqj0_Ko1ODP378YT7sV7LECgRj5QJU6sF5nlf4m2g5sFypBw9GFAkEE-OaWGYxRJOy2ioU41ggAJIkcza2B_N5AL2KLROtm0-c2MxplM4ZzHxrUv9A24zlgzo3Pz4NONwU_gaOcDB7j1dZKXD8UaoIrZv0BTd8JeojYowm9Usdg7Rt4Fpo_vDLJdrEUfbxVlXieDD9Fr1fu72-d4AduT_J3n-rIhyX4gFav-KfP-qOxqOZsmjXZirsBxZs7042NYeirRYnLv35cxIAJARz03FJmeKViUivwC5mCWw64hjRad9XyyBOP2n8KFOrTXhPskC-WwEfksGtfLxi6VW76FHGvRdwHXzMwVfNqe3P5H_WZUc-vxeTAsTnqZz3WA97lM4MLrX0nTZYgXxCEiS6raSOiEMqcx_Nv7Zxre-abj4LZRbFpH8nx1SEiaOV2Dm-a1iPFEmCs0L4kDtt6VImSVIQaTOAd3KFSo7W_XTvRPsQJOtblrcKyuagztX_Yr0lT0YqN9I9MZAARo7M5OfwSLJW16rdmp4NuRefEvNPNHO2cVh1Xha1qNGuF_QDvWFFmWG0Y6IbRqLmF-Dv8BY4TWyOeVnADJftGQw2QSr8RmbCHryA'}}except Exception as e:print(e)continue

新建py文件:

from ydm import YdmVerifyY = YdmVerify()
with open('./img2/captcha.png','rb') as f:s = f.read()
Y.sin_slide_verify(image=s)

(三)动态获取验证码

根据一和二结合代码,修改py文件

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
import time
import requests
from ydm import YdmVerifyservice = Service(executable_path="../_resources/chromedriver")
driver = webdriver.Chrome(service=service)
driver.get("https://www.douban.com/")
time.sleep(2)frame = driver.find_element(By.XPATH, '//*[@id="anony-reg-new"]/div/div[1]/iframe')
driver.switch_to.frame(frame)
time.sleep(0.5)select = driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/ul[1]/li[2]')
select.click()username = driver.find_element(By.XPATH, '//*[@id="username"]')
ActionChains(driver).pause(0.5).click(username).send_keys("xxxxxxxxxx").parform()password = driver.find_element(By.XPATH, '//*[@id="password"]')
ActionChains(driver).pause(0.5).click(password).send_keys("xxxxxxxxxx").parform()submit = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div[1]/div[5]/a')
submit.click()time.sleep(2)
driver.switch_to.frame("tcaptcha_iframe_dy")img = driver.find_element(By.XPATH, '//*[@id="slideBg"]')
img.screenshot("./img2/captcha.png")
time.sleep(1)Y = YdmVerify()
with open('./img2/captcha.png','rb') as f:s = f.read()
Y.sin_slide_verify(image=s)time.sleep(3)
driver.quit()

相关文章:

验证码:EasyDL 机器学习识别与云码平台一站式识别

目录 EasyDL 机器学习识别&#xff08;实践&#xff1a;京东商城&#xff09; &#xff08;一&#xff09;批量获取验证码图片 &#xff08;二&#xff09;EasyDL机器学习&#xff08;百度智能云&#xff09; &#xff08;三&#xff09;调用EasyDLAPI接口识别验证码 云码…...

postgreSQL中的高速缓存

1. 高速缓存简介 ​如下图所示&#xff0c;当一个postgreSQL进程读取一个元组时&#xff0c;需要获取表的基本信息&#xff08;例如&#xff1a;表的oid、索引信息和统计信息等&#xff09;及元组的模式信息&#xff0c;这些信息被分别记录在多个系统表中。通常一个表的模式信…...

我把MySQL运行在Docker上,差点完了……

容器的定义&#xff1a;容器是为了解决“在切换运行环境时&#xff0c;如何保证软件能够正常运行”这一问题。 目前&#xff0c;容器和 Docker 依旧是技术领域最热门的词语&#xff0c;无状态的服务容器化已经是大势所趋&#xff0c;同时也带来了一个热点问题被大家所争论不以&…...

【华为OD题库-023】文件目录大小-java

题目 一个文件目录的数据格式为:目录id,本目录中文件大小&#xff0c;(子目录id列表)。其中目录id全局唯一&#xff0c; 取值范围[1 ,200]&#xff0c;本目录中文件大小范围[1,1000]&#xff0c;子目录id列表个数[0,10] 例如: 1 20 (2,3)表示目录1中文件总大小是20,有两个子目录…...

4. 【自动驾驶与机器人中的SLAM技术】点云中的拟合问题和K近邻

目录 1.在三维体素中定义 NEARBY14&#xff0c;实现 14 格最近邻的查找。2.推导arg max||Ad||22的解为ATA的最大特征向量或者奇异向量。3. 将本节的最近邻算法与一些常见的近似最近邻算法进行对比&#xff0c;比如nanoflann&#xff0c;给出精度指标和时间效率指标。4. 也欢迎大…...

正点原子嵌入式linux驱动开发——Linux ADC驱动

在之前的笔记中&#xff0c;学习了如何给ICM20608编写IIO驱动&#xff0c;ICM20608本质就是ADC&#xff0c;因此纯粹的ADC驱动也是IIO驱动框架的。本章就学习一下如何使用STM32MP1内部的ADC&#xff0c;并且在学习巩固一下IIO驱动。 ADC简介 ADC ADC&#xff0c;Analog to D…...

自动化测试介绍和分类,看这一篇就够了

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…...

Debian中执行脚本 提示没有那个文件或目录

原因是在脚本头有句&#xff1a; ~/.bash_profile这个在CentOS里执行是正常的&#xff0c;但在Debian中是没有的&#xff0c;它改成了&#xff1a; ~/.profile一、区别&#xff1a; 1、/etc/profile&#xff1a; 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文…...

放松鸭-技术支持

“放松鸭”利用苹果手表的HRV心率变异性和静息心率等数据进行分析&#xff0c;帮助您了解当前身体疲劳和心理压力程度&#xff0c;并及时提醒您的压力状态。我们的目标是让您更好地感知、管理和应对压力&#xff0c;让您的身心得到平静和放松。通过读取您的心脏数据&#xff0c…...

Vue 报错error:0308010C:digital envelope routines::unsupported

你遇到的错误&#xff0c;error:0308010C:digital envelope routines::unsupported&#xff0c;与 OpenSSL 相关&#xff0c;表明在你的 Vue.js 应用中可能存在与加密操作相关的问题。这种错误通常出现在 OpenSSL 库存在不匹配或问题的情况下。 以下是解决此问题的一些建议&am…...

Android 9.0 隐藏设置中一级菜单“已连接的设备”

Android 9.0 隐藏设置中一级菜单“已连接的设备” 接到客户反馈需要隐藏设备设置中的“已连接的设备”一级菜单&#xff0c;具体修改参照如下&#xff1a; /vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/SettingsActivity.java somethin…...

Hive开窗函数根据特定条件取上一条最接近时间的数据(根据条件取窗口函数的值)

一、Hive开窗函数根据特定条件取上一条最接近时间的数据&#xff08;单个开窗函数&#xff0c;实际取两个窗口&#xff09; 针对于就诊业务&#xff0c;一次就诊&#xff0c;多个处方&#xff0c;处方结算时间可能不一致&#xff0c;然后会有多个AI助手推荐用药&#xff0c;会…...

指针与函数

指针函数&#xff1a;函数的返回值可以是整型值、浮点型值、字符型值等&#xff0c;在C语言中还允许一个函数的返回值是一个指针&#xff08;地址&#xff09;&#xff0c;这种返回指针的函数称为指针函数。 指针函数语法格式&#xff1a; 基类型 * 函数名&#xff08;参数列…...

GBase8a-GDCA-第二次阶段测试

文章目录 主要内容在这里插入图片描述 ![在这里插入图片描述](https://img-blog.csdnimg.cn/1d552b9d6d204f4fb4280ccc52807ed5.png)在这里插入图片描述 总结 主要内容 GBase8a-GDCA-第二次阶段测试及答案 总结 以上是今天要讲的内容&#xff0c;GBase8a-GDCA-第二次阶段测试…...

Go 理解零值

在 Go 语言中&#xff0c;零值&#xff08;Zero Value&#xff09;是指在声明变量但没有显式赋值的情况下&#xff0c;变量会被自动赋予一个默认值。这个默认值取决于变量的类型&#xff0c;不同类型的变量会有不同的零值。零值是 Go 语言中的一个重要概念&#xff0c;因为它确…...

SQL编写规范【干货】

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目 2 SQL书写规范 3 SQL编写原则 获取所有软件开发资料&#xff1a;点我获取...

2.5 Windows驱动开发:DRIVER_OBJECT对象结构

在Windows内核中&#xff0c;每个设备驱动程序都需要一个DRIVER_OBJECT对象&#xff0c;该对象由系统创建并传递给驱动程序的DriverEntry函数。驱动程序使用此对象来注册与设备对象和其他系统对象的交互&#xff0c;并在操作系统需要与驱动程序进行交互时使用此对象。DRIVER_OB…...

[ubuntu]ubuntu上安装jdk1.8教程

首先需要去官方网站去下载对应jdk1.8版本&#xff1a; https://www.oracle.com/java/technologies/downloads/ 您也可以去csdn搜索我提供jdk安装包 这里以jdk-8u201-linux-x64.tar.gz为例子&#xff0c;首先下载安装后解压 tar -zxvf jdk-8u201-linux-x64.tar.gz 比如我解…...

金蝶云星空其他出库单保存提示序列号不一致

文章目录 金蝶云星空其他出库单保存提示序列号不一致保存报错初步分析总结 金蝶云星空其他出库单保存提示序列号不一致 保存报错 显示单据数量0.序列号数量3 初步分析 输入实发数量没有触发序列号数量的计算 检查实发数量的值更新事件 实发数量和序列号数量的转换&#xff…...

FBI:皇家勒索软件要求350名受害者支付2.75亿美元

导语 最近&#xff0c;FBI和CISA联合发布的一份通告中透露&#xff0c;自2022年9月以来&#xff0c;皇家勒索软件&#xff08;Royal ransomware&#xff09;已经入侵了全球至少350家组织的网络。这次更新的通告还指出&#xff0c;这个勒索软件团伙的赎金要求已经超过了2.75亿美…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...