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


    目录

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

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

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

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

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

    (一)获取验证码图片

    (二)验证码识别

    (三)动态获取验证码


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

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

    1. from selenium import webdriver
    2. from selenium.webdriver.chrome.service import Service
    3. from selenium.webdriver.common.by import By
    4. from selenium.webdriver import ActionChains
    5. import time
    6. import requests
    7. service = Service(executable_path="../_resources/chromedriver")
    8. driver = webdriver.Chrome(service=service)
    9. driver.get("https://passport.jd.com/uc/login")
    10. select = driver.find_element(By.XPATH, '/html/body/div[2]/div[2]/div[1]/div/div[3]/a')
    11. select.click()
    12. username = driver.find_element(By.XPATH, '//*[@id="loginname"]')
    13. ActionChains(driver).pause(0.5).click(username).send_keys("xxxxxxxxxx").parform()
    14. password = driver.find_element(By.XPATH, '//*[@id="nloginpwd"]')
    15. ActionChains(driver).pause(0.5).click(password).send_keys("xxxxxxxxxx").parform()
    16. submit = driver.find_element(By.XPATH, '//*[@id="loginsubmit"]')
    17. submit.click()
    18. for i in range(30):
    19. time.sleep(1)
    20. img = driver.find_element(By.XPATH, '/html/body/div[4]/div/div/div/div[1]/div[2]/div[1]/img')
    21. img.screenshot("./img/{}.png".format(i))
    22. time.sleep(0.5)
    23. refresh = driver.find_element(By.XPATH, '/html/body/div[4]/div/div/div/div[1]/div[2]/div[2]')
    24. refresh.click()
    25. time.sleep(3)
    26. 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来测试)

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

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

    (一)获取验证码图片

    1. from selenium import webdriver
    2. from selenium.webdriver.chrome.service import Service
    3. from selenium.webdriver.common.by import By
    4. from selenium.webdriver import ActionChains
    5. import time
    6. import requests
    7. service = Service(executable_path="../_resources/chromedriver")
    8. driver = webdriver.Chrome(service=service)
    9. driver.get("https://www.douban.com/")
    10. time.sleep(2)
    11. frame = driver.find_element(By.XPATH, '//*[@id="anony-reg-new"]/div/div[1]/iframe')
    12. driver.switch_to.frame(frame)
    13. time.sleep(0.5)
    14. select = driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/ul[1]/li[2]')
    15. select.click()
    16. username = driver.find_element(By.XPATH, '//*[@id="username"]')
    17. ActionChains(driver).pause(0.5).click(username).send_keys("xxxxxxxxxx").parform()
    18. password = driver.find_element(By.XPATH, '//*[@id="password"]')
    19. ActionChains(driver).pause(0.5).click(password).send_keys("xxxxxxxxxx").parform()
    20. submit = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div[1]/div[5]/a')
    21. submit.click()
    22. time.sleep(2)
    23. driver.switch_to.frame("tcaptcha_iframe_dy")
    24. img = driver.find_element(By.XPATH, '//*[@id="slideBg"]')
    25. img.screenshot("./img2/captcha.png")
    26. time.sleep(3)
    27. driver.quit()

    (二)验证码识别

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

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

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

    注意根据个人情况修改token

    1. import json
    2. import time
    3. import requests
    4. import base64
    5. class YdmVerify(object):
    6. _custom_url = "http://api.jfbym.com/api/YmServer/customApi"
    7. _token = ""
    8. _headers = {
    9. 'Content-Type': 'application/json'
    10. }
    11. def common_verify(self, image, verify_type="60000"):
    12. # 数英汉字类型
    13. # 通用数英1-4位 10110
    14. # 通用数英5-8位 10111
    15. # 通用数英9~11位 10112
    16. # 通用数英12位及以上 10113
    17. # 通用数英1~6位plus 10103
    18. # 定制-数英5位~qcs 9001
    19. # 定制-纯数字4位 193
    20. # 中文类型
    21. # 通用中文字符1~2位 10114
    22. # 通用中文字符 3~5位 10115
    23. # 通用中文字符6~8位 10116
    24. # 通用中文字符9位及以上 10117
    25. # 定制-XX西游苦行中文字符 10107
    26. # 计算类型
    27. # 通用数字计算题 50100
    28. # 通用中文计算题 50101
    29. # 定制-计算题 cni 452
    30. payload = {
    31. "image": base64.b64encode(image).decode(),
    32. "token": self._token,
    33. "type": verify_type
    34. }
    35. print(payload)
    36. resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
    37. print(resp.text)
    38. return resp.json()['data']['data']
    39. def slide_verify(self, slide_image, background_image, verify_type="20101"):
    40. # 滑块类型
    41. # 通用双图滑块 20111
    42. payload = {
    43. "slide_image": base64.b64encode(slide_image).decode(),
    44. "background_image": base64.b64encode(background_image).decode(),
    45. "token": self._token,
    46. "type": verify_type
    47. }
    48. resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
    49. print(resp.text)
    50. return resp.json()['data']['data']
    51. def sin_slide_verify(self, image, verify_type="20110"):
    52. # 通用单图滑块(截图) 20110
    53. payload = {
    54. "image": base64.b64encode(image).decode(),
    55. "token": self._token,
    56. "type": verify_type
    57. }
    58. resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
    59. print(resp.text)
    60. return resp.json()['data']['data']
    61. def traffic_slide_verify(self, seed, data, href, verify_type="900010"):
    62. # 定制-滑块协议slide_traffic 900010
    63. payload = {
    64. "seed": seed,
    65. "data": data,
    66. "href": href,
    67. "token": self._token,
    68. "type": verify_type
    69. }
    70. resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
    71. print(resp.text)
    72. return resp.json()['data']['data']
    73. def click_verify(self, image, label_image=None, extra=None, verify_type="30100"):
    74. # 通用任意点选1~4个坐标 30009
    75. # 通用文字点选1(extra,点选文字逗号隔开,原图) 30100
    76. # 定制-文字点选2(extra="click",原图) 30103
    77. # 定制-单图文字点选 30102
    78. # 定制-图标点选1(原图) 30104
    79. # 定制-图标点选2(原图,extra="icon") 30105
    80. # 定制-语序点选1(原图,extra="phrase") 30106
    81. # 定制-语序点选2(原图) 30107
    82. # 定制-空间推理点选1(原图,extra="请点击xxx") 30109
    83. # 定制-空间推理点选1(原图,extra="请_点击_小尺寸绿色物体。") 30110
    84. # 定制-tx空间点选(extra="请点击侧对着你的字母") 50009
    85. # 定制-tt_空间点选 30101
    86. # 定制-推理拼图1(原图,extra="交换2个图块") 30108
    87. # 定制-xy4九宫格点选(原图,label_image,image) 30008
    88. payload = {
    89. "image": base64.b64encode(image).decode(),
    90. # "label_image": base64.b64encode(label_image).decode(),
    91. "token": self._token,
    92. "type": verify_type
    93. }
    94. if extra:
    95. payload['extra'] = extra
    96. resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
    97. print(resp.text)
    98. return resp.json()['data']['data']
    99. def rotate(self, out_ring_image, inner_circle_image):
    100. # 定制-X度单图旋转 90007
    101. # payload = {
    102. # "image": base64.b64encode(image).decode(),
    103. # "token": self._token,
    104. # "type": "90007"
    105. # }
    106. # 定制-Tt双图旋转,2张图,内圈图,外圈图 90004
    107. payload = {
    108. "out_ring_image": base64.b64encode(out_ring_image).decode(),
    109. "inner_circle_image": base64.b64encode(inner_circle_image).decode(),
    110. "token": self._token,
    111. "type": "90004"
    112. }
    113. resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
    114. print(resp.text)
    115. return resp.json()['data']['data']
    116. def google_verify(self, googlekey, pageurl, invisible=1, data_s=""):
    117. _headers = {
    118. 'Content-Type': 'application/json'
    119. }
    120. """
    121. 第一步,创建验证码任务
    122. :param
    123. :return taskId : string 创建成功的任务ID
    124. """
    125. url = "http://122.9.52.147/api/YmServer/funnelApi"
    126. payload = json.dumps({
    127. "token": self._token,
    128. # "type": "40011", ## v3
    129. "type": "40010", ## v2
    130. "googlekey": googlekey,
    131. "enterprise": 1, ## 是否为企业版
    132. "pageurl": pageurl,
    133. "invisible": invisible,
    134. "data-s": data_s,
    135. # 'action':"TEMPLATE" #V3必传
    136. })
    137. # 发送JSON格式的数据
    138. result = requests.request("POST", url, headers=_headers, data=payload).json()
    139. print(result)
    140. # {'msg': '识别成功', 'code': 10000, 'data': {'code': 0, 'captchaId': '51436618130', 'recordId': '74892'}}
    141. captcha_id = result.get('data').get("captchaId")
    142. record_id = result.get('data').get("recordId")
    143. times = 0
    144. while times < 150:
    145. try:
    146. url = f"http://122.9.52.147/api/YmServer/funnelApiResult"
    147. data = {
    148. "token": self._token,
    149. "captchaId": captcha_id,
    150. "recordId": record_id
    151. }
    152. result = requests.post(url, headers=_headers, json=data).json()
    153. print(result)
    154. # {'msg': '结果准备中,请稍后再试', 'code': 10009, 'data': []}
    155. if result['msg'] == "结果准备中,请稍后再试":
    156. time.sleep(5)
    157. times += 5
    158. continue
    159. if result['msg'] == '请求成功' and result['code'] == 10001:
    160. print(result['data']['data'])
    161. return result['data']['data']
    162. # {'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'}}
    163. except Exception as e:
    164. print(e)
    165. continue
    166. def fun_captcha_verify(self, publickey, pageurl, verify_type="40007"):
    167. # 定制类接口-Hcaptcha 40007
    168. payload = {
    169. "publickey": publickey,
    170. "pageurl": pageurl,
    171. "token": self._token,
    172. "type": verify_type
    173. }
    174. resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
    175. print(resp.text)
    176. return resp.json()['data']['data']
    177. def hcaptcha_verify(self):
    178. # 定制类接口-Hcaptcha
    179. _headers = {
    180. 'Content-Type': 'application/json'
    181. }
    182. _custom_url = "http://api.jfbym.com/api/YmServer/funnelApi"
    183. payload = {
    184. "sitekey": "",
    185. "pageurl": "",
    186. "token": self._token,
    187. "type": '50013'
    188. }
    189. result = requests.post(_custom_url, headers=_headers, data=json.dumps(payload)).json()
    190. print(result)
    191. captcha_id = result.get('data').get("captchaId")
    192. record_id = result.get('data').get("recordId")
    193. times = 0
    194. while times < 150:
    195. try:
    196. url = f"http://api.jfbym.com/api/YmServer/funnelApiResult"
    197. data = {
    198. "token": self._token,
    199. "captchaId": captcha_id,
    200. "recordId": record_id
    201. }
    202. result = requests.post(url, headers=_headers, json=data).json()
    203. print(result)
    204. # {'msg': '结果准备中,请稍后再试', 'code': 10009, 'data': []}
    205. if result['msg'] == "结果准备中,请稍后再试":
    206. time.sleep(5)
    207. times += 5
    208. continue
    209. if result['msg'] == '请求成功' and result['code'] == 10001:
    210. print(result['data']['data'])
    211. return result['data']['data']
    212. # {'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'}}
    213. except Exception as e:
    214. print(e)
    215. continue

    新建py文件:

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

    (三)动态获取验证码

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

    1. from selenium import webdriver
    2. from selenium.webdriver.chrome.service import Service
    3. from selenium.webdriver.common.by import By
    4. from selenium.webdriver import ActionChains
    5. import time
    6. import requests
    7. from ydm import YdmVerify
    8. service = Service(executable_path="../_resources/chromedriver")
    9. driver = webdriver.Chrome(service=service)
    10. driver.get("https://www.douban.com/")
    11. time.sleep(2)
    12. frame = driver.find_element(By.XPATH, '//*[@id="anony-reg-new"]/div/div[1]/iframe')
    13. driver.switch_to.frame(frame)
    14. time.sleep(0.5)
    15. select = driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/ul[1]/li[2]')
    16. select.click()
    17. username = driver.find_element(By.XPATH, '//*[@id="username"]')
    18. ActionChains(driver).pause(0.5).click(username).send_keys("xxxxxxxxxx").parform()
    19. password = driver.find_element(By.XPATH, '//*[@id="password"]')
    20. ActionChains(driver).pause(0.5).click(password).send_keys("xxxxxxxxxx").parform()
    21. submit = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div[1]/div[5]/a')
    22. submit.click()
    23. time.sleep(2)
    24. driver.switch_to.frame("tcaptcha_iframe_dy")
    25. img = driver.find_element(By.XPATH, '//*[@id="slideBg"]')
    26. img.screenshot("./img2/captcha.png")
    27. time.sleep(1)
    28. Y = YdmVerify()
    29. with open('./img2/captcha.png','rb') as f:
    30. s = f.read()
    31. Y.sin_slide_verify(image=s)
    32. time.sleep(3)
    33. driver.quit()
  • 相关阅读:
    【网络编程】传输层——UDP协议
    目标管理利器OKR-给被各大APP抢占使用时长的你
    记录一些Linux的指令(持续更新)
    风控模型中有多个目标需要预测怎么办?来看看这份分类实操内容
    如何使用 Rask AI 进行视频本地化
    嘿,朋友,其实 CSS 动画超简单的 - 时间函数篇(贝塞尔曲线、steps,看完还不懂算我输)
    cobalt strike钓鱼lnk报错:无法连接到远程服务器
    LLaMA模型指令微调 字节跳动多模态视频大模型 Valley 论文详解
    网络原理(网络协议初识)
    08.爱芳地产项目小程序全栈项目经验(已上线)
  • 原文地址:https://blog.csdn.net/liyunyang2000/article/details/134430858