基于selenium和autoit 实现B站视频自动上传功能

1. 下载chromedriver

1.1 先查看自己的谷歌浏览器版本

可以直接输入命令chrome://version/查看,也可以在浏览器设置里查看

image-20220712132732006

image-20220712132334872

1.2 下载谷歌驱动

根据自己谷歌浏览器的版本下载相应的浏览器驱动,如果没有的可以尝试选择最接近的版本。

chromedriver下载地址: http://chromedriver.storage.googleapis.com/index.html

可以把chromedriver.exe放到与你的python解释器同一路径,这样在代码里调用就不用写chromedriver路径了,

(看个人喜好,也可以不放不过需要在代码里写上chromedriver路径)

image-20220712133328945

2. selenium的使用

selenium的简单使用方法可以参考我这篇博客学习:selenium的使用

若只需要运行本项目的,直接跳过往下看

python环境安装 控制台直接pip install selenium就行

这里为避免每次都需要登录的问题我这里采用直接绑定已经存在的浏览器方案,这样只需要在第一次登录一下就行,该浏览器自动保持登录状态方便我们之后的操作。

selenium操作已经打开的浏览器参考 :

selenium操作已经打开的浏览器

参考上面的博客在谷歌浏览器路径下cmd进入控制台直接输入:

chrome.exe --remote-debugging-port=9527 --user-data-dir=“D:\AutomationProfile”

即会自动打开谷歌浏览器,打开之后默认的是谷歌引擎,在设置里修改为baidu即可上网

image-20220715135909063

然后需要访问: https://www.bilibili.com/

先手动登录(手机app直接扫码就行),登录之后这个浏览器会自动保存登录信息,以后再打开就不用再登录了。

selenium 定位上传按钮并点击,参考代码

from time import sleep
from selenium.webdriver.common.by import By
# https://blog.csdn.net/weixin_44791551/article/details/124719506
import os
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from lxml import etree

# # chrome.exe --remote-debugging-port=9527 --user-data-dir=“D:\AutomationProfile”
options = Options()
# 调用已开启的浏览器
options.add_experimental_option("debuggerAddress", "127.0.0.1:9527")
bro = webdriver.Chrome(options=options)

# url = 'https://www.bilibili.com/'
# 第一次要先在浏览器登录之后才可以调用这个上传视频的接口
url = 'https://member.bilibili.com/platform/upload/video/frame?spm_id_from=333.1007.top_bar.upload'
bro.get(url)
time.sleep(5)
# 这里点击上传元素那里是个iframe,不能直接定位上传元素,要switch_to一下
iframe = bro.find_element_by_xpath('/html/body/div/div[3]/div[4]/div[2]/div/div/div/div/iframe')
bro.switch_to.frame(iframe)
# 定位上传元素按钮并点击
bro.find_element_by_class_name("upload-btn").click()


至此点击之后会弹出文件夹让选择文件,这里已经跳出三界之外了,不在selenium的管辖范围,我们采用autoit编写个自动化脚本程序帮我们实现自动选择文件并打开上传,下面开始自动化脚本程序制作。

3. autoit 制作视频上传脚本并打包成exe文件

针对b站上传视频出现弹窗,我们编写脚本只需要几行代码:

ControlFocus("打开","","Edit1")
WinWait("[CLASS:#32770]","",10)
ControlSetText("打开", "", "Edit1", $CmdLine[1])
Sleep(2000)
ControlClick("打开", "","Button1");

autoit官网下载地址:https://www.autoitscript.com/site/autoit/downloads/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pqZ38yix-1659664280377)(../AppData/Roaming/Typora/typora-user-images/image-20220715182430863.png)]

直接点击下载,傻瓜式安装就ok

安装完成之后,点击电脑左下角的开始按钮即可看到:

在这里插入图片描述

第一步我们需要点击那个红框程序,开始编写脚本与调试

在这里插入图片描述


这里可能会遇到编写代码中文乱码问题,可以参考这篇博客: https://www.bbsmax.com/A/qVdeLD1Q5P/

看一下脚本,里面的参数并不是胡乱写的,我们是先用Autolt Window Info(x64)定位的,比如定位打开按键,就打开这个程序,拖动那个Finder Tool图标到选择框

在这里插入图片描述

然后定位打开按钮

在这里插入图片描述

这样参数都定位完了。

在这里插入图片描述

第三行的$CmdLine[1]可以写成一个完整的文件路径,这里为了灵活性改了,到时候把这个脚本转成exe格式后就可以用python灵活调用了,像这样

import os
path = 'C:\\Users\\admin\\vodeo\\1.mp4'
os.system('C:\\Users\\admin\\Desktop\\1.exe %s' % path)

直接就可以用python调用os自动上传了。

打包成exe文件也比较简单,直接点击Compile Script to .exe(x64)程序,选择脚本直接转化即可

image-20220715184817503

至此简单的autoit脚本程序制作完成。

4. 最终实现

参考代码:

# -*- coding: UTF-8 -*-
import os
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from lxml import etree

# https://blog.csdn.net/weixin_44791551/article/details/124719506
# # chrome.exe --remote-debugging-port=9527 --user-data-dir=“D:\AutomationProfile”
options = Options()
# 调用已开启的浏览器
options.add_experimental_option("debuggerAddress", "127.0.0.1:9527")
bro = webdriver.Chrome(options=options)

# url = 'https://www.bilibili.com/'
# 第一次要先在浏览器登录之后才可以调用这个上传视频的接口
url = 'https://member.bilibili.com/platform/upload/video/frame?spm_id_from=333.1007.top_bar.upload'
bro.get(url)
time.sleep(5)
# 这里点击上传元素那里是个iframe,不能直接定位上传元素,要switch_to一下
iframe = bro.find_element_by_xpath('/html/body/div/div[3]/div[4]/div[2]/div/div/div/div/iframe')
bro.switch_to.frame(iframe)
# 定位上传元素按钮并点击
bro.find_element_by_class_name("upload-btn").click()
time.sleep(5)
# 点击之后会弹出文件夹让选择文件,这里已经跳出三界之外了,不在selenium的管辖范围,
# 我们采用autoit编写个自动化脚本程序帮我们实现自动选择文件并打开上传,脚本编写测试请看第三步,如果有我写好的1.exe可执行程序就不用看了


path = 'C:\\Users\\admin\\vodeo\\1.mp4'
os.system('C:\\Users\\admin\\Desktop\\1.exe %s' % path)

# autoit 中文字符输入问题 https://www.bbsmax.com/A/qVdeLD1Q5P/

# 上传成功之后填一下参数
time.sleep(5)
str = bro.page_source
html = etree.HTML(str)

# 判断网页是否出现“上传完成”字样
compete_up = html.xpath('//*[@id="video-up-app"]/div[1]/div/div/div[1]/div[2]/div[2]/div[2]/div[1]/div[1]/span//text()')
if len(compete_up) == 0:
    pass
else:
    if compete_up[0] == '上传完成':
        # 标签定位选择点击“自制”按钮。这里各栏目可以根据自己的需要选择或填写
        bro.find_element_by_xpath('//*[@id="video-up-app"]/div[1]/div/div/div[1]/div[3]/div[6]/div/div[2]/div/div[1]/div/span').click()
        time.sleep(2)
        # 定位点击立即投稿
        bro.find_element_by_xpath('//*[@id="video-up-app"]/div[1]/div/div/div[1]/div[3]/div[14]/div/span').click()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340