上一篇爬取某视频的文章被禁了,这一篇应该不会了吧。

导入识别包:

识别验证码图片.py  这里用返回27坐标

import base64
import json
import requests# 一、图片文字类型(默认 3 数英混合):
# 1 : 纯数字
# 1001:纯数字2
# 2 : 纯英文
# 1002:纯英文2
# 3 : 数英混合
# 1003:数英混合2
#  4 : 闪动GIF
# 7 : 无感学习(独家)
# 11 : 计算题
# 1005:  快速计算题
# 16 : 汉字
# 32 : 通用文字识别(证件、单据)
# 66:  问答题
# 49 :recaptcha图片识别
# 二、图片旋转角度类型:
# 29 :  旋转类型
#
# 三、图片坐标点选类型:
# 19 :  1个坐标
# 20 :  3个坐标
# 21 :  3 ~ 5个坐标
# 22 :  5 ~ 8个坐标
# 27 :  1 ~ 4个坐标
# 48 : 轨迹类型
#
# 四、缺口识别
# 18 : 缺口识别(需要2张图 一张目标图一张缺口图)
# 33 : 单缺口识别(返回X轴坐标 只需要1张图)
# 五、拼图识别
# 53:拼图识别
def base64_api(uname, pwd, img, typeid):with open(img, 'rb') as f:base64_data = base64.b64encode(f.read())b64 = base64_data.decode()data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)if result['success']:return result["data"]["result"]else:return result["message"]return ""

导入需要的各自乱七八糟的东西 

步骤:

1.进入登陆界面 找到账号、密码的input标签和登录的按钮标签

2.给账号密码标签传递你的账号密码,点击登录。(不易执行过快)

3.此时弹出验证码:

4.我们要做的是先将整个网页屏幕进行截屏(保存到本地) ,然后根据验证码所在网页中的位置进行验证码标签的定位,计算出其大小,用PIL的Image工具进行裁剪,将裁剪后的图片保存到本地。

5.将图片传给图片识别工具,返回的结果是如: x1,y1|x2,y2这样的字符串,进行处理,得到一组坐标。

6.将坐标传入动作链,也就是让其去按顺序点击验证码上对应的文字。

7.点击验证码图片上的确定,登陆成功。

import time
from shibie import base64_api
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
from PIL import Imagetart = time.time()
s = Service('chromedriver.exe')bro = webdriver.Chrome(service=s)
bro.maximize_window()
bro.get('https://passport.bilibili.com/login')
u = bro.find_element(By.ID, 'login-username')
p = bro.find_element(By.ID, 'login-passwd')
btn = bro.find_element(By.CSS_SELECTOR, '.btn-login')
time.sleep(1)
u.send_keys('你的B站账号')
time.sleep(1)
p.send_keys('你的B站密码')
btn.click()
time.sleep(2)
# 截屏
bro.save_screenshot('aa.png')
code_img_ele = bro.find_element(By.CSS_SELECTOR, '.geetest_panel_next')
# 验证码图片左上角的坐标 x,y
location = code_img_ele.location
print('location', location)
# 验证码标签对应的长和宽
size = code_img_ele.size
print('size:', size)
# 左上角和右下角坐标
rangle = (int(location['x']), int(location['y']), int(location['x'] + size['width']), int(location['y'] + size['height']))
# 至此验证码图片区域就确定下来了# 裁剪图片
i = Image.open('aa.png')
code_img_name = 'code.png'
# crop根据指定区域进行图片裁剪
frame = i.crop(rangle)
frame.save(code_img_name)result = base64_api('你的账号', '你的密码', code_img_name, 27)
print(result)
#time.sleep(2)
pos_lst = [k.split(',') for k in result.split('|')]# 设置动作链
action = ActionChains(bro)
for x, y in pos_lst:action.move_to_element_with_offset(code_img_ele, x, y).click().perform()
action.release()
#time.sleep(2)
btn2 = bro.find_element(By.CSS_SELECTOR, '.geetest_commit_tip')
btn2.click()
time.sleep(3)
print(time.time() - tart)

其它小知识:

无头浏览器+反检测

chrome_options快被遗弃了,会告知用options代替。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
# 实现无可视化界面
from selenium.webdriver.chrome.options import Options
# 实现规避检测
from selenium.webdriver import ChromeOptions# 实现无可视化界面的操作
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')# 实现规避检测
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])# 如何实现让selenium规避被检测到的风险
s = Service('chromedriver.exe')
bro = webdriver.Chrome(service=s, options=option, chrome_options=chrome_options)

其它:

# iframe处理 切换浏览器标签定位的作用域
bro.switch_to.frame('iframeResult')# 执行js代码 如下滚一个屏幕的距离
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')# 前进后退
bro.back()
bro.forward()

selenium实现自动登录B站相关推荐

  1. python自动输入账号密码_Python如何基于selenium实现自动登录博客园

    这篇文章主要介绍了Python如何基于selenium实现自动登录博客园,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需要做的准备: 本文章是使用 ...

  2. 利用selenium模拟自动登录链家、贝壳、安居客等网站(超级实用,推荐收藏!)

    大家好, 今天跟大家分享一个利用selenium模拟自动登录王连某家.an聚客等网站. 文章内容超级实用,尽快在小本本上记录下来哟. 特别说明,以下代码仅用于交流学习,不做其他商业用途,切记切记! 上 ...

  3. selenium 实现自动登录校网(网页版)

    文章目录 selenium 实现自动登录校网 1.安装 python3.7 2.安装 selenium 3.安装 chrome 和驱动 4.定时任务 5.实现代码 selenium 实现自动登录校网 ...

  4. python基础教程:Python如何基于selenium实现自动登录博客园

    这篇文章主要介绍了Python如何基于selenium实现自动登录博客园,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需要做的准备: 本文章是使用 ...

  5. [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍

    前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...

  6. Python爬虫 Selenium实现自动登录163邮箱和Locating Elements介绍

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  7. python已打开页面获取信息_python+selenium实现自动登录网页获取信息(一)

    我用的是一个教师继续教育的网站,进行演示和模拟,网站:http://cas.study.yanxiu.jsyxsq.com/auth/login?service=http%3A%2F%2Fwww.17 ...

  8. Python用selenium实现自动登录和下单的脚本

    前言 学python对selenium应该不陌生吧 Selenium 是最广泛使用的开源 Web UI(用户界面)自动化测试套件之一.Selenium 支持的语言包括C#,Java,Perl,PHP, ...

  9. Python学习笔记(二):利用Selenium一键自动登录QQ空间、百度等网站

    曾经在学校闲的时候,见到有人通过程序自动登录百度等网站,觉得很厉害.实习的时候,偶然的机会也研究了一下,有空的时候试试运行就自动点赞,觉得还比较有意思,可以用来装装X,哈哈. 一.python环境 第 ...

  10. python + selenium实现自动登录操作(以淘宝为例)

    selenium操作不熟练的可以查看一下这篇文章:selenium操作大全 一.登录前准备操作 定位一下相对应html位置,输入一般为input标签.登录按钮一般为button. 输入账号密码那块: ...

最新文章

  1. python中面向切片编程(AOP)和装饰器
  2. boost::xtime相关的测试程序
  3. 程序员养发(老师付推荐)
  4. 如何计算 string 的 crc32 值 ?
  5. Namomo Fish(Easy) Round 1
  6. 看完这篇还不了解Nginx,那我就哭了!
  7. cad画圆如何确定圆心_原来在CAD中画个圆也有这么多学问!你知道这些画圆的技巧吗?...
  8. 找规律 SGU 107 987654321 problem
  9. 机器学习实践笔记(一)KNN
  10. 瑞昱Realtek交换机芯片概要
  11. [论文笔记]Outfit Compatibility Prediction and Diagnosis with Multi-Layered Comparison Network
  12. PhD-Debate 预告 | 底层视觉研究,我们应该往哪走?
  13. 运算放大器:加法电路
  14. Python网络爬取科目一题库(1685道)2021.1.3
  15. 软件项目量化管理目标举例
  16. 鲸探发布点评:9月21日发售高分一号、七号卫星数字藏品
  17. SCI、SCI期刊与SCI论文的区别
  18. Solidity 生成Java类
  19. C++实现快速打印乘法口诀表
  20. 【Matlab】多元线性回归(Excel可直接替换数据)

热门文章

  1. java外文文库_java外文文献毕业设计
  2. Python统计学11——分位数回归
  3. Linux下查询外网IP地址方法集合
  4. 从零开始学习CANoe(六)—— CAPL 测试节点
  5. 词干提取算法Porter Stemming Algorithm解读
  6. b站用户年龄段占比_用户和电商变现上,微博、小红书、B站差别在哪里?
  7. IPV6电视播放器V1.0.3
  8. http405错误解决
  9. 什么叫结构化程序设计?它的主要内容是什么
  10. [JPA错误]javax.persistence.EntityNotFoundException: Unable to find xxx