Selenium+超级鹰 登录B站
需要使用到的包
- selenium
- time
- chaojiying
import time
from chaojiying import Chaojiying_Client
from selenium.webdriver import Chrome
from selenium.webdriver import ActionChains
注意,如果没有使用过超级鹰的经验可以先看一下开发文档 ,下载下来看看怎么用就行
注册登录后可以购买题分,然后生成软件ID
然后在跳转的页面点击生成一个软件ID
之后就会有下面这样的界面和信息
之后回到pycharm中进行代码的编写
注意,需要将你下载的chaojiying.py文件放到和你自己写的python文件一个目录下
一些其它注意事项
B站的验证码目前是几个随机文字进行点击,所以我们使用的是9004验证码类型,还有,完整代码里留有文字的换成自己的超级鹰的id(看下图码住的就是你自己的用户名),密码,以及软件ID (刚才让你自己记住的)
完整代码
# @Editor : 百年
# @FileName :selenium登录b站.py
# @Time :2024/10/15 21:17
import time
from chaojiying import Chaojiying_Client
from selenium.webdriver import Chrome
from selenium.webdriver import ActionChains
# 创建浏览器对象
browser1 = Chrome(executable_path='../others/chromedriver.exe')
# 获取b站的链接
url = 'https://www.bilibili.com/'
browser1.get(url)
# 定位到b站的登录按钮
login_btn = browser1.find_element_by_xpath('/html/body/div[2]/div[2]/div[1]/div[1]/ul[2]/li[1]/li/div/div')
# 点击登录按钮
login_btn.click()
time.sleep(2)
# 定位到输入用户名的输入框
username_input = browser1.find_element_by_xpath('/html/body/div[4]/div/div[4]/div[2]/form/div[1]/input')
# 之后进行用户名的输入
usernm = input('输入你的b站用户名/账户>>')
username_input.send_keys(usernm)
time.sleep(1)
# 定位到输入密码的用户框
password_input = browser1.find_element_by_xpath('/html/body/div[4]/div/div[4]/div[2]/form/div[3]/input')
passwd = input('请输入你的b站密码:')
password_input.send_keys(passwd)
time.sleep(2)
# 定位到登录按钮并点击登录
dl_btn = browser1.find_element_by_xpath('/html/body/div[4]/div/div[4]/div[2]/div[2]/div[2]')
time.sleep(2)
dl_btn.click()
# selenium中心思想回顾:可见即可得
# 对于selenium不需要记住那么多属性
# 定位到完整的验证码对话框
time.sleep(3)
code_tag = browser1.find_element_by_xpath('/html/body/div[5]/div[2]/div[6]/div/div')
# 打印查看
#print(code_tag)
time.sleep(6)
# # 识别验证码(使用打码平台进行验证码识别)
# # 然后定位到图片,直接将图片作为png格式,对比学习之前的使用回顾,selenium在某些方面还是有点方便的
im = code_tag.screenshot_as_png # 我们直接调用将其保存成功图片
chaojiying = Chaojiying_Client('你的超级鹰用户名', '你的超级鹰密码', '你的超级鹰软件id')
result = chaojiying.PostPic(im, 9004)
# print(result['pic_str'])
print(result)
'''
{'err_no': 0, 'err_str': 'OK',
'pic_id': '1266120541083430028',
'pic_str': '214,209|133,170|254,89|60,234',
'md5': 'ce0580f7b163af15f5be1623b07a50f9'}'''
# 切分坐标,注意,切分的返回值是一个列表
code_xy = result['pic_str'].split('|')
print(code_xy)
# # 创建动作链
for pos in code_xy:
time.sleep(1)
pos_lst = pos.split(',') #利用逗号切分xy,返回的是x,y坐标组成的列表
print(pos_lst)
# 注意还需要将其强转为整数类型
x = int(pos_lst[0])
y = int(pos_lst[1])
# 让动作链来点击定位到的坐标,并点击
# 注意这里用的不是move_by_offset,因为其是根据整个屏幕左下角来作为起始点的
# 而move_to_element_offset是以我们指定的element标签为起始点的
# 这个例子中我们是以定位到的验证码图片标签的左下角为坐标原点的
ActionChains(browser1).move_to_element_with_offset(to_element=code_tag,xoffset=x,yoffset=y).click().perform()
time.sleep(1)
# 点击确认按钮
su_btn = browser1.find_element_by_xpath('/html/body/div[5]/div[2]/div[6]/div/div/div[3]/a')
su_btn.click()