Python爬虫进阶——案例:模拟bilibili登录)

        主要内容:模拟bilibili账号密码登录,不要实现的的实现功能是单击登录按钮,切换登录方式, 输入账号和密码,然后完成图片点击验证,最后单击立即登录按钮。

1、第一步:通过selenium模块访问bilibili的登录页面,定位并单击账号登陆按钮,然后分别定位账号和密码输入框,并输入账号和密码。

2、第二步:识别图片中图形的位置。

3、第三步:进行按照图形识别顺序进行点击。

4、第四步:点击确认标签。

##############################
##作者:白雪公主的后妈
##时间:2024年1月12日
##主题:Python爬虫进阶——案例:模拟bilibili登录
##主要内容:模拟bilibili登录
##############################
'''
模拟bilibili账号密码登录,不要实现的的实现功能是单击登录按钮,切换登录方式,
输入账号和密码,然后完成图片点击验证,最后单击立即登录按钮
'''
#第一步:通过selenium模块访问bilibili的登录页面,定位并单击账号登陆按钮,然后分别定位账号和密码输入框,并输入账号和密码。
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
#################################
import base64
import json
import requests
import pandas as pd
#################################
# from PIL import Image
service = Service('E:\\python\\Scripts\\chromedriver.exe')      #实例化一个谷歌浏览器
browser = webdriver.Chrome(service=service)
browser.get('https://www.bilibili.com/')   #访问bilibili的登录页面                           #访问淘宝网页首页

login_user_page = browser.find_element(By.XPATH,'//*[@id="i_cecream"]/div[2]/div[1]/div[1]/ul[2]/li[1]/li/div/div/span')      #通过XPath表达式定位'账号登陆'按钮
login_user_page.click()             #单击账号登录按钮
time.sleep(2)
username_input = browser.find_element(By.XPATH,'//*[@class="login-pwd-wp"]/form/div[1]/input')        #通过标点ID定位账号输入框
password_input = browser.find_element(By.XPATH,'//*[@class="login-pwd-wp"]/form/div[3]/input')        #通过标点ID定位密码输入框
username_input.send_keys('123456')          #在账号框中输入123456
time.sleep(2)                               #停留两秒,模拟真是人类操作
password_input.send_keys('234567')          #在密码框中输入234567
login_button = browser.find_element(By.XPATH,'//*[@class="btn_primary "]')      #通过XPath表达式定位'登陆'按钮
login_button.click()             #单击账号登录按钮
time.sleep(2)

#第二步:识别图片中图形的位置
#############################
def base64_api(uname, pwd, img):
    '''
    验证码识别函数
    :param uname: 快识别用户名
    :param pwd:   快识别密码
    :param img:   图片路径
    :return:      返回坐标点
    '''
    with open(img, 'rb') as f:
        base64_data = base64.b64encode(f.read())
        b64 = base64_data.decode()
    data = {"username": uname, "password": pwd, "typeid": 21, "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"]
#############################

# 解决验证码自动识别问题
Img_input = browser.find_element(By.XPATH,'//*[@class="geetest_holder geetest_silver"]')
Img_input.screenshot('yzm.png')

#对图片进行解码,获取验证码识别以后的结果
result = base64_api('XXXX','XXXX','yzm.png')
# print('验证码识别结果:',result)      #结果33,254|232,70|214,133|90,236
result_list = result.split('|')
print(result_list)

#第三步:进行按照图形识别顺序进行点击 借助selenium执行点击操作
for i in result_list:
    x = result_list.split(',')[0]       #构建x,y轴坐标
    y = result_list.split(',')[1]
    #ActionChains为动作链对象,指定标签元素进行点击(Img_input, int(x), int(y)),click()点击操作,perform()执行动作链
    ActionChains(browser).move_to_element_with_offset(Img_input, int(x), int(y)).click().perform()
time.sleep(2)

#第四步:点击确认标签
OK_button = browser.find_element(By.XPATH, '//*[@class="geetest_commit_tip"]')
OK_button.click()
time.sleep(4)
browser.quit()                                  #关闭所有页面,退出浏览器驱动程序

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白雪公主的后妈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值