基于selenium和autoit 实现B站视频自动上传功能
文章目录
- 1. 下载chromedriver
- 1.1 先查看自己的谷歌浏览器版本
- 1.2 下载谷歌驱动
- 2. selenium的使用
- 3. autoit 制作视频上传脚本并打包成exe文件
- 4. 最终实现
1. 下载chromedriver
1.1 先查看自己的谷歌浏览器版本
可以直接输入命令chrome://version/查看,也可以在浏览器设置里查看
1.2 下载谷歌驱动
根据自己谷歌浏览器的版本下载相应的浏览器驱动,如果没有的可以尝试选择最接近的版本。
chromedriver下载地址: http://chromedriver.storage.googleapis.com/index.html
可以把chromedriver.exe放到与你的python解释器同一路径,这样在代码里调用就不用写chromedriver路径了,
(看个人喜好,也可以不放不过需要在代码里写上chromedriver路径)
2. selenium的使用
selenium的简单使用方法可以参考我这篇博客学习:selenium的使用
若只需要运行本项目的,直接跳过往下看
python环境安装 控制台直接pip install selenium就行
这里为避免每次都需要登录的问题我这里采用直接绑定已经存在的浏览器方案,这样只需要在第一次登录一下就行,该浏览器自动保持登录状态方便我们之后的操作。
selenium操作已经打开的浏览器参考 :
selenium操作已经打开的浏览器
参考上面的博客在谷歌浏览器路径下cmd进入控制台直接输入:
chrome.exe --remote-debugging-port=9527 --user-data-dir=“D:\AutomationProfile”
即会自动打开谷歌浏览器,打开之后默认的是谷歌引擎,在设置里修改为baidu即可上网
然后需要访问: 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/
直接点击下载,傻瓜式安装就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)程序,选择脚本直接转化即可
至此简单的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()
基于selenium和autoit 实现B站视频自动上传功能相关推荐
- selenium、you-get下载B站视频、监控播放量和弹幕
selenium.you-get下载B站视频.监控播放量和弹幕 说明 完整代码 运行结果 说明 前两段代码是使用you-get下载视频,第一段是说明.第三段代码爬取b站视频的标题+播放量+弹幕数.注意 ...
- b站视频自动上传软件,soga
全民小视频自动上传软件,soga 我们有爱奇艺,优酷,b站,腾讯,搜狐新浪等上传软件,新增加西瓜,全民和好看,后期不断更新
- python3抓取b站弹幕_python3写爬取B站视频弹幕功能
需要准备的环境: 一个B站账号,需要先登录,否则不能查看历史弹幕记录 联网的电脑和顺手的浏览器,我用的Chrome Python3环境以及request模块,安装使用命令,换源比较快: pip3 in ...
- python下载B站视频(简单)
python下载B站视频资料 众所周知,网页版的B站无法下载视频,然本人喜欢经常在B站学习,奈何没有网时,无法观看视频资源,手机下载后屏幕太小又不想看,遂写此程序以解决此问题 话不多说,进入正题 1. ...
- 基于Trtc的内贸站视频聊天服务
基于Trtc的内贸站视频聊天服务分享 说到视频聊天,大家第一个想到的是啥,QQ! 其实最早的视频聊天工具应该是 : Netmeeting(我能找到的最早聊天工具) Netmeeting是Windows ...
- python刷b站视频浏览量_python + selenium 刷B站播放量的实例代码
B站UP主的主要收益来源(播放量获取的奖励.用户充电.广告等等) 首先做up主最直接的就是做视频,当你的粉丝过1000或者视频总播放超过10万时可以申请创造激励,申请创造激励之后,你的原创视频播放会给 ...
- python爬虫:Selenium爬取B站视频标题、播放量、发布时间
上次尝试了利用Ajax机制爬取B站视频播放量等数据(链接在下方),但是发现响应的JSON数据中没有发布时间的数据,这次决定用Selenium试一下. python爬虫:Ajax爬取B站视频标题.播放量 ...
- 基于Aria2的PC端B站多p视频下载(10M/s以上)
楔子 上半年还没买平板,又不想在手机上看视频,天天像个伞兵一样背着大书包装着我傻大黑粗的游戏本去图书馆. 又因为图书馆没有WIFI,除了开热点之外就只能把视频下载下来看,一些资源又只有B站有,痛点就出 ...
- 手把手教你使用Python网络爬虫获取B站视频选集内容(附源码)
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 位卑未敢忘忧国,事定犹须待阖棺. ...
最新文章
- mybatis调用oracle存储过程
- 想用一张报表满足多人需求?只需这3招,轻松实现0到100分新突破
- Python爬虫入门教程 26-100 知乎文章图片爬取器之二
- Spark 1.2 发布,开源集群计算系统
- oracle行列互换sql,解决Oracle行列转换问题的一个方法
- mysql row 格式binlog 恢复_为什么要把MySQL的binlog格式修改为row
- netstat 命令详解
- 在Eclipse上用JAVA连接数据库
- android 大牛播放组件,大牛直播Android播放端SDK说明
- 企业服务器型号对照表,云手机服务器规格列表
- Android arm64-v8a、armeabi-v7a、armeabi、x86详解
- 微信小程序上传代码, Error: 分包大小超过限制,main package source size 4732KB exceed max limit 2MB
- 3D建模的几种常用建模方法
- java把图片导出ppt_ppt转图片程序(java实现)
- 移动硬盘无法访问怎么办?还能恢复数据吗?
- java断言--assertThat用法
- 比较超声与临床体检检查早期关节炎患者手部屈肌腱腱鞘炎
- 面试说了这几句话,offer铁定无望!
- 硅谷创业教父保罗·格雷厄姆给的创业建议书
- java获取首字母字符串首字母