1.前言

计算机的出现,推动了人类社会的进步,使得人们更高效的工作或是生活。当我们很”懒“的时候,计算机就能站出来,帮助我们做一些我们觉得浪费时间的事情了。你嫌用手点鼠标麻烦,计算机可以帮你哦。本文纯粹是为了学习计算机技术,增强自己的计算机技能,而且本人比较懒,不喜欢自己动手,所有利用自己写的一个小程序自动播放视频。切记不能用来刷视频的播放了,本人也坚决反对这种做法。如果读者一意孤行,造成的后果请自行承担。

2.Python+BeautifulSoup+Selenium模拟浏览器循环自动播放视频,如哔哩哔哩某个UP主的视频

我研究了一下,发现使用requests是无法获取到整个页面的。由于对前端也不是很在行,但是查了一下说是动态加载等原因。不管怎么样,咱们先完成这个任务。

2.1需要安装BeautifulSoup和Selenium库,你用的是anaconda的话,打开”anaconda prompt“,选中pycharm中的那个环境,使用命令

conda install BeautifulSoup
conda install selenium

就能安装这两个包了。

2.2然后你需要根据浏览器下载相应的驱动,我的是谷歌,所以使用的是谷歌驱动chromedriver.exe,根据自己浏览其的版本下载驱动,下载谷歌驱动地址为http://chromedriver.storage.googleapis.com/index.html,下载之后,

2.2.1要么使用

executable_path = r"D:\ProgramData\Anaconda3\envs\leisure\chromedriver.exe"
chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(executable_path=executable_path, options=chrome_options)

直接设置路径的方式。

2.2.2要么使用:将chromedriver.exe放到python.exe同目录下

直接使用

driver = webdriver.Chrome()

即可。

3.源程序

import time
import math
import random
from bs4 import BeautifulSoup
from selenium import webdriverclass BLBL:def __init__(self, master_url):self.url = master_url# selenium动态加载,返回driver对象def dynamic_loading(self):# 本地的驱动所在路径executable_path = r"D:\ProgramData\Anaconda3\envs\leisure\chromedriver.exe"chrome_options = webdriver.ChromeOptions()# 后台运行Chromedriverchrome_options.add_argument('--headless')chrome_options.add_argument('--no-sandbox')driver = webdriver.Chrome(executable_path=executable_path, options=chrome_options)"""全屏显示"""driver.maximize_window()time.sleep(3)return driver# 动态加载防爬虫时,获取soup对象def getSoup(self, url):# 使用selenium加载完整页面再返回(blbl之前试过了,单纯的用requests是不能得到整个html页面的,貌似动态加载能得到完整页面)driver = self.dynamic_loading()driver.get(url)driver.implicitly_wait(5)time.sleep(3)html = driver.page_sourcesoup = BeautifulSoup(html, "html.parser")driver.quit()return soupdef getVideosNum(self):# 使用selenium加载完整页面再返回(blbl之前试过了,单纯的用requests是不能得到整个html页面的,貌似动态加载能得到完整页面)url = self.urlsoup = self.getSoup(url)UP_name = soup.find("span", {"id": "h-name"}).contentsprint("%s!主人主人,好高兴见到你 o(*≧▽≦)ツ┏━┓ " % UP_name)print("正在获取投稿视频数 o(≧口≦)o ")ul = soup.find("ul", {"class": "contribution-list"})ui = ul.find("li", {"class": "contribution-item cur"})num_list = ui.find("span", {"class": "num"}).contentsnum = 0for nl in num_list:num = nlnum = int(num)print("投稿视频数获取成功 (๑•̀ㅂ•́)و✧ ,您一共有%d个作品,主人真棒(づ ̄3 ̄)づ╭❤~" % num)return numdef getUrls(self, video_nums):print("正在获取所有视频av或bv号 (ノへ ̄、) ")urls = []# 阿B完整一页的视频数量暂时定为30onepage_nums = 5 * 6pages = math.ceil(video_nums / float(onepage_nums))for i in range(1, pages+1):# 每一页博客列表的urlpage_url = self.url + "?tid=0&page=" + str(i)soup = self.getSoup(page_url)nodes = soup.find("ul", {"class": "clearfix cube-list"}).find_all("li")aids = [node.get("data-aid") for node in nodes]urls.extend(aids)print("视频av或bv号获取成功 ヽ(✿゚▽゚)ノ ")return urlsif __name__ == "__main__":# UP主的投稿页master_url = 'https://space.bilibili.com/8047632/video'blbl = BLBL(master_url)# UP投稿的视频数video_nums = blbl.getVideosNum()# 获取UP的视频后几位号urls = blbl.getUrls(video_nums)len_urls = len(urls)aB_url = "https://www.bilibili.com/video/"# 每个视频每天播放几遍?repeat_times = random.randint(3, 4)for i in range(repeat_times):print("第%d轮访问*^____^*" % i)for url in urls:# 使用谷歌driver自动打开网页,播放视频。video_url = aB_url + urldriver = webdriver.Chrome()driver.maximize_window()print("正在播放", video_url)driver.get(video_url)handles = driver.window_handlesdriver.switch_to.window(handles[-1])time.sleep(3)driver.find_element_by_class_name('bilibili-player-video-wrap').click()time.sleep(15)driver.quit()

4.代码功能

先获得投稿页中投稿视频的总数p,阿B一页最多有30个视频,用p/30就能得到总的页数。遍历这些视频列表页,获得所有的视频地址。最后使用driver访问这些地址。即运行这个程序,就会访问UP投稿页中所有的视频,这样就不用自己动手了,自动播放,方便,适合懒人。

Python+BeautifulSoup+Selenium模拟浏览器循环自动播放视频,如哔哩哔哩某个UP主的视频相关推荐

  1. Python使用selenium模拟浏览器爬取某查查数据

    在使用爬虫爬取某查查的数据的时候,会被识别到,进行反爬限制,最后使用selenium模拟浏览器进行爬取. 这里解决办法主要使用selenium打开浏览器,模拟人操作进行爬取,代码: ua = 'Moz ...

  2. Python利用Selenium模拟浏览器自动操作

    概述 在进行网站爬取数据的时候,会发现很多网站都进行了反爬虫的处理,如JS加密,Ajax加密,反Debug等方法,通过请求获取数据和页面展示的内容完全不同,这时候就用到Selenium技术,来模拟浏览 ...

  3. python下selenium模拟浏览器常见操作

    本文主要记录下selenium的常见操作,如定位具体元素的不同方法.在具体元素内循环.提取文本等.具体代码如下: # -*- coding: utf-8 -*- ''' Created on 2019 ...

  4. 利用python加selenium模拟浏览器爬取百度爱企查企业详细信息

    目录 说明 企查查网页构成方式 代码与详解 说明 本人不是什么爬虫大佬,只是最近在做一个项目的时候需要根据企业的名称把企业的信息爬取下来,例如营业执照.工商注册号等.在网上找了很多的信息与资源,都不是 ...

  5. python 模拟浏览器selenium 微信_Spider-Python爬虫之使用Selenium模拟浏览器行为

    分析 他的代码比较简单,主要有以下的步骤:使用BeautifulSoup库,打开百度贴吧的首页地址,再解析得到id为new_list标签底下的img标签,最后将img标签的图片保存下来. header ...

  6. python 模拟浏览器selenium_python爬虫:使用Selenium模拟浏览器行为

    前几天有位微信读者问我一个爬虫的问题,就是在爬去百度贴吧首页的热门动态下面的图片的时候,爬取的图片总是爬取不完整,比首页看到的少.原因他也大概分析了下,就是后面的图片是动态加载的.他的问题就是这部分动 ...

  7. python 爬虫动态网页的区别_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取...

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  8. python 模拟浏览器selenium_从零开始写Python爬虫 --- 3.1 Selenium模拟浏览器

    本来说好要写Mechanize模拟浏览器的,结果一看居然只支持2.x版本的Python,而且已经长久没有更新维护了,本着学新不学旧的原则,我决定跳过他,直接开学Selenium(其实就是我懒,逃 Se ...

  9. python 模拟用户点击浏览器_python爬虫之selenium模拟浏览器

    1.前言 之前在异步加载(AJAX)网页爬虫的时候提到过,爬取这种ajax技术的网页有两种办法:一种就是通过浏览器审查元素找到包含所需信息网页的真实地址,另一种就是通过selenium模拟浏览器的方法 ...

最新文章

  1. 人类大脑神经如何进化?寄生虫充当了隐形设计师
  2. php常用案例,PHP常用数组处理函数总结,附带运行案例
  3. 归并排序(转载http://www.cnblogs.com/jillzhang/archive/2007/09/16/894936.html)
  4. 【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | ActivityThread 主函数分析 | 应用初始化 | 启动优化项目 )
  5. 优化DOTTEXT之一:缓存配置项
  6. Windows安装 ANT
  7. apache php 脚本,PHP脚本不在Apache服务器上执行
  8. Spring Cloud Eureka(二)注册一个服务的提供者
  9. Silverlight --- Behavior技术(三)
  10. k8s中yaml文件pod的语法(转)
  11. Python: Flask后端与webapi
  12. 咸鱼团队的第一次SCRUM冲刺
  13. 调研分析:全球与中国汽车后置摄像头模组市场现状及未来发展趋势
  14. N沟道的Vgs是正的,P沟道的Vgs是负的
  15. 新闻发布系统之增删改查
  16. 商品销售信息管理系统(大一C语言课设)
  17. 《鬼吹灯》碾压《盗墓笔记》,第四届橙瓜网络文学奖必定名列第一!
  18. prometheus监控java项目(jvm等):k8s外、k8s内
  19. 迈锐宝xl android auto,迈锐宝xl导航怎么连接手机
  20. 涉及到c语言的专业,大学里哪些专业开设C语言、数电、模电、单片机、嵌入式等课程?...

热门文章

  1. 用PHP开发物联网平台到底怎么样?
  2. SQLmap学习笔记
  3. 一文读懂2016上半年ICT产业政策供给:过度与短缺
  4. MusicLab RealLPC for Mac(虚拟吉他乐器)永久破解教程附注册机
  5. atomikos JTA/XA全局事务
  6. Cifar10数据集度盘下载
  7. 2021科技公司薪酬报告
  8. Android Zygote
  9. js室内地图开发_概述-室内地图 JS API | 高德地图API
  10. IE7 中 div 背景透明的问题