selenium利用图鉴 破点击验证码 登录b站

avatar
作者
筋斗云
阅读量:4
from selenium import webdriver import requests import json from selenium.webdriver.common.action_chains import ActionChains import time path = 'chromedriver.exe' browser = webdriver.Chrome(path) browser.get('https://passport.bilibili.com/login') browser.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div[3]/div[2]/div[1]/div[1]/input').send_keys(user) # 定位账户输入框输入账户 browser.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div[3]/div[2]/div[1]/div[3]/input').send_keys(password) # 定位密码输入框输入密码 browser.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div[3]/div[2]/div[2]/div[2]').click() # 点击登录按钮 time.sleep(2) verify_code = browser.find_element_by_xpath('/html/body/div[4]/div[2]/div[6]/div/div') # 定位验证码 tu = verify_code.screenshot_as_base64 # 获取验证码bs4格式 verify_code.screenshot('tu.png')   def base64_api(img,typeid,uname='18720180853', pwd='20010119yx'):     # with open(img, 'rb') as f:     #     base64_data = base64.b64encode(f.read())     #     b64 = base64_data.decode()     data = {"username": uname, "password": pwd, "typeid": typeid, "image": img}     result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)     if result['success']:         return result["data"]["result"]     else:         #!!!!!!!注意:返回 人工不足等 错误情况 请加逻辑处理防止脚本卡死 继续重新 识别         return result["message"]     return ""   result1 = base64_api(tu,21) print(result1)  # 获取点选坐标 for i in result1.split('|'):     x = int(i.split(',')[0])     y = int(i.split(',')[1])     action = webdriver.ActionChains(browser) # 动作链     action.move_to_element_with_offset(verify_code,x,y).click().perform() # 定位到验证码,逐个点击坐标,执行  browser.find_element_by_xpath('/html/body/div[4]/div[2]/div[6]/div/div/div[3]/a/div').click()

验证码形式:

1.

 这种验证码处理:

action = webdriver.ActionChains(browser)

action.move_to_element_with_offset(定位的验证码位置,x坐标,y坐标).click().perform()

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!