selenium实现自动登录B站

简介: selenium实现自动登录B站

导入识别包:

识别验证码图片.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.此时弹出验证码:

96447814-120fc980-1245-11eb-938d-6ea408716c72.png

 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 Image
tart = 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()
相关文章
|
Web App开发
selenium自动登录某宝
selenium自动登录某宝
|
测试技术 Python
selenium利用cookies实现自动登录
selenium利用cookies实现自动登录
|
1月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
99 5
|
1月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
1月前
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
252 5
|
1月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
15天前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
12 0
|
1月前
|
Web App开发 缓存 Linux
高效Selenium测试技巧:轻松控制已开启的浏览器
【10月更文挑战第13天】在进行Selenium测试时,通常会启动新浏览器实例,但有时需要控制已开启的浏览器,以节省时间并更真实地模拟用户行为。这可通过设置Chrome为可远程控制并使用`Remote WebDriver`连接实现。需在启动Chrome时添加`--remote-debugging-port`参数,并通过Python脚本中的`webdriver.Remote`连接至指定端口。此外,还可利用会话ID(Session ID)重新连接浏览器,提高测试灵活性。需要注意浏览器版本兼容性及元素定位稳定性等问题,确保测试准确性和一致性。
252 1
|
1月前
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。