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()