IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> selenium爬虫模拟登录B站(点触验证码) -> 正文阅读

[开发测试]selenium爬虫模拟登录B站(点触验证码)

前言

本文代码借鉴了《python3网络爬虫开发实战》,个人改进主要为针对为判断b站登录是否成功的部分以及返回给超级鹰平台的错误图片代码(设置全局变量)。

# _*_ coding: utf-8 _*_
"""
Time:     ${DATE} ${TIME}
Author:   Hikari
Version:  V 0.1
File:     ${NAME}.py

"""

from io import BytesIO
from PIL import Image
import time
import requests
from selenium.webdriver import ActionChains
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from chaojiying import Chaojiying

#输入你的B站、超级鹰用户名和密码
pic_id =''
EMAIL='your email'
PASSWORD = 'your passwd'
CHAOJIYING_USERNAME = 'your chaojiying username'
CHAOJIYING_PASSWORD = 'your chaojiying passwd'
CHAOJIYING_SOFT_ID = 924124
CHAOJIYING_KIND = 9004 #返回1到4个坐标
#封装函数
class CrackTouClick():
    #测试网站:采用B站登录
    def __init__(self):
        self.url = 'https://passport.bilibili.com/login'
        self.browser = webdriver.Chrome()
        self.wait = WebDriverWait(self.browser, 20)
        self.email = EMAIL
        self.password = PASSWORD
        self.chaojiying = Chaojiying(CHAOJIYING_USERNAME, CHAOJIYING_PASSWORD, CHAOJIYING_SOFT_ID)
    def open(self):
        #打开网页输入用户名密码
        self.browser.get(self.url)
        email = self.wait.until(EC.presence_of_element_located((By.ID, 'login-username')))
        password = self.wait.until(EC.presence_of_element_located((By.ID, 'login-passwd')))
        email.send_keys(self.email)
        password.send_keys(self.password)

    def get_touclick_button(self):
        #获取初始验证按钮
        button = self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-box > a ')))
        return button

    def pick_code(self):
        global pic_id
        time.sleep(5)
        ele = self.browser.find_elements_by_css_selector('img.geetest_item_img')
        if (len(ele)==1):
            pick_img_label = self.browser.find_element_by_css_selector('img.geetest_item_img')  # 获取点触图片标签
            src = pick_img_label.get_attribute('src')  # 获取点触图片链接
            img_content = requests.get(src).content  # 获取图片二进制内容
            f = BytesIO()
            f.write(img_content)
            img0 = Image.open(f)
            scale = [pick_img_label.size['width'] / img0.size[0],
                 pick_img_label.size['height'] / img0.size[1]]  # 获取图片与浏览器该标签大小的比例
            cjy = Chaojiying(CHAOJIYING_USERNAME, CHAOJIYING_PASSWORD, CHAOJIYING_SOFT_ID)
            result = cjy.post_pic(img_content, '9005')  # 发送图片并获取结果
            if result['err_no'] == 0:
                position = result['pic_str'].split('|')
                position = [[int(j) for j in i.split(',')] for i in position]
                for items in position:  # 模拟点击
                    ActionChains(self.browser).move_to_element_with_offset(pick_img_label, items[0] * scale[0], items[1] * scale[1]).click().perform()
                    time.sleep(1)
            time.sleep(2)
            # 点击登录
            certern_btn = self.browser.find_element_by_css_selector('div.geetest_commit_tip')
            time.sleep(1)
            certern_btn.click()
    
    #检测是否登陆成功
    def detect(self):
        current=self.browser.current_url
        if (current == 'https://passport.bilibili.com/account/security#/home'or current =='https://www.bilibili.com/'):
            print('登陆成功')
        else:
            self.chaojiying.report_error(pic_id)
            self.pick_code()
            self.detect()

    def crack(self):
        self.open()
        # 点击验证按钮
        time.sleep(2)
        button = self.get_touclick_button()
        button.click()
        self.pick_code()
        time.sleep(3)
        self.detect()





if __name__ == '__main__':
    crack = CrackTouClick()
    crack.crack()
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-11-19 17:54:54  更:2021-11-19 17:55:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:50:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码