Skip to main content

自动注册b站


import time

import json



import requests

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.chrome.service import Service

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.common.action_chains import ActionChains



"""

5813316482----http://172.83.153.188/ussms?token=d363845043d3652980e870a16b9b8efb

2899174138----http://172.83.153.188/ussms?token=a1dde8f412f346696c7087bfc9236958

4037132967----http://172.83.153.188/ussms?token=7b05a658cbe540e795d62df55a1f216e

2269023768----http://172.83.153.188/ussms?token=936ed652c31633642607851e0f79924e

2269013217----http://172.83.153.188/ussms?token=98d31ba3a10ea7d93ced8ce5974de7d3

2899174190----http://172.83.153.188/ussms?token=fe4490b992dd1397cba93a5f78c1cc45

"""

data_string = "2269023768|http://172.83.153.188/ussms?token=936ed652c31633642607851e0f79924e"

phone, code_url = data_string.strip().split('|')



# ############# 1.创建driver #############

opt = webdriver.ChromeOptions()

opt.add_argument('--start-maximized')

# opt.add_argument('--headless') # 无头

# opt.add_argument('--proxy-server=http://tunnel2.qg.net:17955') # 代理

service = Service("driver/chromedriver")

driver = webdriver.Chrome(service=service, options=opt)



# ############# 2.打开首页 & 全屏 #############

# driver.maximize_window()

driver.get('https://passport.bilibili.com/login')



# ############# 3.点击短信登录 #############

sms_btn = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(

By.XPATH,

'/html/body/div[1]/div/div[2]/div[3]/div[3]/div/div/div/div[1]/span[2]'

))

sms_btn.click()



# ############# 4.输入手机号 #############

phone_txt = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(

By.XPATH,

'//*[@id="geetest-wrap"]//input[@name="tel"]'

))

phone_txt.send_keys(phone)



# ############# 5.选择地区 #############

area_btn = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(

By.CLASS_NAME,

'el-select'

))

area_btn.click()



# ############# 6.选择美国 #############

driver.execute_script('document.querySelector(".el-select-dropdown__list").children[4].click()')



# ############# 7.点击获取验证码 #############

time.sleep(2)

# el-button captcha-buttom el-button--primary

send_msg_btn = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(

By.CLASS_NAME,

'captcha-buttom'

))

send_msg_btn.click()




# ############# 8.等待出现验证码 #############

def is_sc(dv):

# print(dv)

tag = dv.find_element(

By.CLASS_NAME,

'geetest_item_wrap'

)

img_src = tag.get_dom_attribute("style")

print(img_src)

if img_src:

return tag




WebDriverWait(driver, 3000, 1).until(is_sc)



# ############# 9.截屏 #############

code_img = driver.find_element(

By.CLASS_NAME,

'geetest_silver'

)




# ############# 10.调用代码平台,识别:1-3分 #############



def base64_api(b64_image): # 图鉴

data = {"username": '图鉴平台的账号', "password": '图鉴平台的密码', "typeid": 27, "image": b64_image}

result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text) # 发送请求. 得到识别的结果

if result['success']:

return result["data"]["result"] # 从结果中拿到你要的内容

else:

return result["message"]




dic = base64_api(code_img.screenshot_as_base64)

print("图片识别结果:", dic)



# ############# 11.在网页点选识别的验证码坐标 #############

for i in dic.split('|'):

x, y = i.split(',')

x = int(x)

y = int(y)

ActionChains(driver).move_to_element_with_offset(code_img, xoffset=x, yoffset=y).click().perform()



# ############# 12.点击确认-发送短信 #############

confirm_btn = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(

By.CLASS_NAME,

'geetest_commit'

))

confirm_btn.click()



# ############# 13.等待接收验证码 #############

print("接码地址:", code_url)

sms_code = input("请输入验证码:")

"""

for i in range(5):

try:

time.sleep(5)

res = requests.get(

url=code_url

).text

# 【哔哩哔哩】102731短信登录验证码@5分钟内朠效@请勿泄露

sms_code_match_list = re.findall("\d{6}", res)

if not sms_code_match_list:

continue

sms_code = sms_code_match_list[0]

print('收到短信验证码', sms_code)

break

except Exception as e:

continue

"""



# ############# 14.输入验证码 #############

input_sms_code_txt = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(

By.XPATH,

'//*[@id="geetest-wrap"]/div/div[3]/div[3]/div/input'

))

input_sms_code_txt.send_keys(sms_code)



# ############# 15.点击登录 #############

do_login_btn = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(

By.XPATH,

'//*[@id="geetest-wrap"]/div/div[5]/a[1]'

))

do_login_btn.click()




# ############# 16.登录成功 & 获取cookie #############

def is_success(dv):

if dv.current_url == "https://www.bilibili.com/":

return True




WebDriverWait(driver, 30, 0.5).until(is_success)



cookie_list = driver.get_cookies()

print("注册成功,cookie信息:", cookie_list)



# ############# 17.停止 #############

time.sleep(10)

driver.close()