Python——超级鹰打码平台实现selenium对b站的自动化登陆

目录

一 、Chrome(谷歌)驱动器的下载

(一)驱动器版本选择

(二)下载Chrome驱动器

二、需要安装的库

(一)安装命令

(二)指定selenium版本原因

三、实现步骤

(一)导入相关库

(二)创建驱动器对象

(三)点击登录,并输入账号密码

(四)获取验证码框元素,并截图

四、完整代码 


一 、Chrome(谷歌)驱动器的下载

(一)驱动器版本选择

1.查看自己电脑Chrome浏览器版本

点击谷歌浏览器主页右上角三个点——>点击帮助——>关于Google Chrome(如下图:)

查看结果如下:

(二)下载Chrome驱动器

1.下载谷歌浏览器驱动器Chromedriver地址:

CNPM Binaries Mirror

2.驱动器下载版本需大于等于浏览器版本。

本机浏览器版本:107.0.5304.107

所以选择如下图版本下载:

 3.点击下载

 4.解压并放到Python项目下:

二、需要安装的库

如下图:

(一)安装命令

先点击terminal进入终端,输入pip install xxx(库的名称)

注:selenium需要指定版本3.141.0

 命令:pip install selenium==3.141.0

(二)指定selenium版本原因

后面在获取登录验证码元素时需使用find_element_by_css_selector的方法获取验证码元素。

若使用find_element方法项目最后一步会报错:如图

三、实现步骤

(一)导入相关库

# 时间模块
import time
# selenium的动作链模块
from selenium.webdriver import ActionChains
# 导入超级鹰打码平台模块(choajiying.py文件的Chaojiying_Client类)
from chaojiying import Chaojiying_Client
# 驱动器模块
from selenium import webdriver
from selenium.webdriver.common.by import By

注:chaojiying是打码平台提供的一个python文件后面会讲到。

(二)创建驱动器对象

# B站的网页地址
url = 'https://www.bilibili.com/'
# 创建驱动器对象
driver = webdriver.Chrome
# driver = webdriver.Chrome(executable_path='驱动器路径') 
# 传入URL地址
driver.get(url)

注:若驱动器没在项目路径下,需手动指定驱动器路径。 

(三)点击登录,并输入账号密码

1.打开网页版b站:哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

2.按F12(或右键点击检查)打开 开发者工具

3.定位元素

有爬虫基础的可以 自己写xpath、css等元素定位方法。

(1)点击登录按钮弹出登录框

点击开发者工具右上角的箭头(标签选择器)——>再点击登录按钮——>右键copy被选中元素的selector路径——直接粘贴到代码里——>调用click()方法——延迟3秒等待加载(如下图、代码)

# 点击登录按钮,获取登录页面
driver.find_element(By.CSS_SELECTOR,'#i_cecream > div.bili-feed4 > div.bili-header.large-header > div.bili-header__bar > ul.right-entry > li:nth-child(1) > li > div.right-entry__outside.go-login-btn > div').click()
time.sleep(3)

注:#i_cecream > div.bili-feed4 > div.bili-header.large-header > div.bili-header__bar > ul.right-entry > li:nth-child(1) > li > div.right-entry__outside.go-login-btn > div 即为selector路径

(2)输入账号和密码

点击开发者工具右上角的箭头(标签选择器)——>再点击账号、密码输入框——>分别右键copy被选中元素的selector路径——直接粘贴到代码里——>调用send_keys()方法——延迟1到2秒等待加载(如下图、代码)

# 输入账号,密码
driver.find_element(By.CSS_SELECTOR,'body > div.bili-mini-mask > div > div.bili-mini-content > div.bili-mini-login-wrapper > div.bili-mini-password-wrapper > div.bili-mini-account > input[type=text]').send_keys('账号')
time.sleep(1)
driver.find_element(By.CSS_SELECTOR,'body > div.bili-mini-mask > div > div.bili-mini-content > div.bili-mini-login-wrapper > div.bili-mini-password-wrapper > div.bili-mini-password > div.left > input[type=password]').send_keys('密码')
time.sleep(2)

 (3)点击确定登录按钮

点击开发者工具右上角的箭头(标签选择器)——>再点击登录按钮——>右键copy被选中元素的selector路径——直接粘贴到代码里——>调用click()方法——延迟2秒等待加载(如下图、代码)

# 点击确定登录按钮
driver.find_element(By.CSS_SELECTOR,'body > div.bili-mini-mask > div > div.bili-mini-content > div.bili-mini-login-wrapper > div.bili-mini-login-register-wrapper > div.universal-btn.login-btn').click()
time.sleep(2)

(四)获取验证码框元素,并截图

点击开发者工具右上角的箭头(标签选择器)——>再点击验证码框——>右键copy被选中元素的selector路径——直接粘贴到代码里——>调用screenshot()方法进行截图并命名为yzm.png保存到该项目目录下(如下图、代码)

# 获取验证码的元素,并进行截图。
image = driver.find_element(By.CSS_SELECTOR,'body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_no_logo.geetest_panelshowclick > div.geetest_panel_next > div')
image.screenshot('yzm.png'))

打码平台的作用:获取验证码截图需要点击的汉字的坐标位置。

1.注册超级鹰账号

地址:超级鹰验证码识别-专业的验证码云端识别服务,让验证码识别更快速、更准确、更强大

2.获取题分(1元=1000题分)

3.下载python开发文档

点击开发文档——>选择python语言——>点击这里下载——>解压并将chaojiying.py文件放到python项目下

 

 4.创建软件ID

进入用户中心——>点击软件ID——>再点击生成一个软件ID——>输入任意的软件名称——>点击提交会生成一个如下图的软件ID

 

 5.将chaojiying.py文件导入到项目文件中(如下代码)

# 导入超级鹰打码平台模块(choajiying.py文件的Chaojiying_Client类)
from chaojiying import Chaojiying_Client

6.导入超级鹰类

并输入账号,密码,软件ID,以二进制的方式读取验证码图片,获取验证码的坐标字典,并取出坐标值。

# 导入超级鹰,并输入账号,密码,软件ID
chaojiying = Chaojiying_Client('账号', '密码', '软件ID')  # 用户中心>>软件ID 生成一个替换 96001
im = open('yzm.png', 'rb').read()  # 以二进制的方式读取验证码
result = chaojiying.PostPic(im, 9004)['pic_str'] #获取验证码的坐标字典,并取出坐标值

 pic_str为返回的坐标值并通过键取出值。

7.点击验证码

对返回的验证码坐标值进行处理,得到每个验证码的x轴和y轴。

创建动作链对象通过move_to_element_with_offset方法依次点击验证码。

for index in result.split('|'): #以"|"进行分割,得到一个列表,并循环出每一个字的坐标
    x = index.split(',')[0] # 得到x轴的坐标
    y = index.split(',')[1] # 得到y轴的坐标
    action = ActionChains(driver) #创建动作链对象
    action.move_to_element_with_offset(image,int(x),int(y)).click().perform()
    # image:验证码的元素框;x:验证码的横轴;y:验证码的纵轴
    time.sleep(1)

8.点击确认完成登录

time.sleep(1) # 加载一秒后在进行点击
driver.find_element(By.CSS_SELECTOR,'body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_panelshowclick > div.geetest_panel_next > div > div > div.geetest_panel > a > div').click()

四、完整代码 

# _*_ coding : utf-8 _*_
# 时间模块
import time
# selenium的动作链模块
from selenium.webdriver import ActionChains
# 导入超级鹰打码平台模块(choajiying.py文件的Chaojiying_Client类)
from chaojiying import Chaojiying_Client
# 驱动器模块
from selenium import webdriver
from selenium.webdriver.common.by import By
# B站的网页地址
url = 'https://www.bilibili.com/'
driver = webdriver.Chrome() # 若驱动器没在
driver.get(url)
# 点击登录按钮,获取登录页面
driver.find_element(By.CSS_SELECTOR,'#i_cecream > div.bili-feed4 > div.bili-header.large-header > div.bili-header__bar > ul.right-entry > li:nth-child(1) > li > div.right-entry__outside.go-login-btn > div').click()
time.sleep(3)
# 输入账号,密码
driver.find_element(By.CSS_SELECTOR,'body > div.bili-mini-mask > div > div.bili-mini-content > div.bili-mini-login-wrapper > div.bili-mini-password-wrapper > div.bili-mini-account > input[type=text]').send_keys('B站账号')
time.sleep(1)
driver.find_element(By.CSS_SELECTOR,'body > div.bili-mini-mask > div > div.bili-mini-content > div.bili-mini-login-wrapper > div.bili-mini-password-wrapper > div.bili-mini-password > div.left > input[type=password]').send_keys('密码')
time.sleep(2)
# 点击确定登录按钮
driver.find_element(By.CSS_SELECTOR,'body > div.bili-mini-mask > div > div.bili-mini-content > div.bili-mini-login-wrapper > div.bili-mini-login-register-wrapper > div.universal-btn.login-btn').click()
time.sleep(2)
# 获取验证码的元素,并进行截图。
image = driver.find_element(By.CSS_SELECTOR,'body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_panelshowclick > div.geetest_panel_next > div')
image.screenshot('yzm.png')
# 导入超级鹰,并输入账号,密码,软件ID
chaojiying = Chaojiying_Client('超级鹰账号', '密码', '软件ID')  # 用户中心>>软件ID 生成一个替换 96001
im = open('yzm.png', 'rb').read()  # 以二进制的方式读取验证码
result = chaojiying.PostPic(im, 9004)['pic_str'] #获取验证码的坐标字典,并取出坐标值
for index in result.split('|'): #以"|"进行分割,得到一个列表,并循环出每一个字的坐标
    x = index.split(',')[0] # 得到x轴的坐标
    y = index.split(',')[1] # 得到y轴的坐标
    action = ActionChains(driver) #创建动作链对象
    action.move_to_element_with_offset(image,int(x),int(y)).click().perform()
    # image:验证码的元素框;x:验证码的横轴;y:验证码的纵轴
    time.sleep(1)
time.sleep(1) # 加载一秒后在进行点击
driver.find_element(By.CSS_SELECTOR,'body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_panelshowclick > div.geetest_panel_next > div > div > div.geetest_panel > a > div').click()

注:该文章仅提供思路,如有错误欢迎指出。

  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值