当前位置:   article > 正文

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

python使用打码平台

目录

一 、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方法项目最后一步会报错:如图

三、实现步骤

(一)导入相关库

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

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

(二)创建驱动器对象

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

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

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

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

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

3.定位元素

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

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

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

  1. # 点击登录按钮,获取登录页面
  2. 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()
  3. 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秒等待加载(如下图、代码)

  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('账号')
  3. time.sleep(1)
  4. 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('密码')
  5. time.sleep(2)

 (3)点击确定登录按钮

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

  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-login-register-wrapper > div.universal-btn.login-btn').click()
  3. time.sleep(2)

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

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

  1. # 获取验证码的元素,并进行截图。
  2. 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')
  3. image.screenshot('yzm.png'))

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

1.注册超级鹰账号

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

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

3.下载python开发文档

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

 

 4.创建软件ID

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

 

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

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

6.导入超级鹰类

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

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

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

7.点击验证码

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

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

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

8.点击确认完成登录

  1. time.sleep(1) # 加载一秒后在进行点击
  2. 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()

四、完整代码 

  1. # _*_ coding : utf-8 _*_
  2. # 时间模块
  3. import time
  4. # selenium的动作链模块
  5. from selenium.webdriver import ActionChains
  6. # 导入超级鹰打码平台模块(choajiying.py文件的Chaojiying_Client类)
  7. from chaojiying import Chaojiying_Client
  8. # 驱动器模块
  9. from selenium import webdriver
  10. from selenium.webdriver.common.by import By
  11. # B站的网页地址
  12. url = 'https://www.bilibili.com/'
  13. driver = webdriver.Chrome() # 若驱动器没在
  14. driver.get(url)
  15. # 点击登录按钮,获取登录页面
  16. 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()
  17. time.sleep(3)
  18. # 输入账号,密码
  19. 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站账号')
  20. time.sleep(1)
  21. 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('密码')
  22. time.sleep(2)
  23. # 点击确定登录按钮
  24. 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()
  25. time.sleep(2)
  26. # 获取验证码的元素,并进行截图。
  27. image = driver.find_element(By.CSS_SELECTOR,'body > div.geetest_panel.geetest_wind > div.geetest_panel_box.geetest_panelshowclick > div.geetest_panel_next > div')
  28. image.screenshot('yzm.png')
  29. # 导入超级鹰,并输入账号,密码,软件ID
  30. chaojiying = Chaojiying_Client('超级鹰账号', '密码', '软件ID') # 用户中心>>软件ID 生成一个替换 96001
  31. im = open('yzm.png', 'rb').read() # 以二进制的方式读取验证码
  32. result = chaojiying.PostPic(im, 9004)['pic_str'] #获取验证码的坐标字典,并取出坐标值
  33. for index in result.split('|'): #以"|"进行分割,得到一个列表,并循环出每一个字的坐标
  34. x = index.split(',')[0] # 得到x轴的坐标
  35. y = index.split(',')[1] # 得到y轴的坐标
  36. action = ActionChains(driver) #创建动作链对象
  37. action.move_to_element_with_offset(image,int(x),int(y)).click().perform()
  38. # image:验证码的元素框;x:验证码的横轴;y:验证码的纵轴
  39. time.sleep(1)
  40. time.sleep(1) # 加载一秒后在进行点击
  41. 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()

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/287452
推荐阅读
相关标签
  

闽ICP备14008679号