一、经历

1、末年末月末日在一个夜黑风高的夜晚,脑袋一热在网上花了大价钱买了某某的一个培训课程。开始时候该平台还没有对用户进行时间限制,突然某天在网页上显示剩余100天,然后一下子慌了,时间、时间、时间。。。。
2、接下来开始想着怎么把视频抓下来,在网上翻阅了大量的视频爬虫,有简单有难的,我这个是属于难的,一开始的时候基本上上每周网页策略都在变,还好现在稳定了。
3、视频采用的pcf文件加密传输,然后又是一顿找资料,好吧,放弃了~ 无解
4、最后突发奇想,用桌面录像工具,把想要的视频一个一个录制下来(也许以后就躺在硬盘里吃灰了。。。。)。后来发现数量多了,消耗时间多,有没有那个精力盯着电脑。吃力不讨好 ~~~~~~
5、某天突发奇想,用代码录屏。本想自己实现代码,东西多放弃;然后考虑用代码控制桌面录屏工具;ok,完美
6、撸代码呀撸代码 ~~~~~~~~
7、等我录完了再放毒 ~~~~~~~~

end、代码已经释放

二、构成

1、工具

a、selenium + chrome 用于模拟用户
b、scrapy 简单粗暴
d、EV录屏 工具

2、要点

a、scrapy模拟浏览器轮序播放
b、代码控制ev录像

三 代码

此处主要是对ev录像工具的控制(爬虫代码上传了,会被举报,毕竟签了协议,个人还是干不过集团的_),此文档主要是提供一些思路:对于一些实在无法抓取的视频,可以采用屏幕录制的。(温馨提醒:若是视频上带有个人信息的水印,为了避免不必要的纠纷,不建议上传到网上)

前提:运行代码前,先到打开ev录屏工具,调整好录取桌面的大小和声音来源

ev开始录制

# 切换Windows窗口,查找EV录屏软件 ;开始录制 (3秒准备延时)Window.find_window_wildcard(".*EV.*")Window.set_foreground()# ctrl + F1  开始win32api.keybd_event(17, 0, 0, 0)  # Controlwin32api.keybd_event(112, 0, 0, 0)  # F1win32api.keybd_event(112, 0, win32con.KEYEVENTF_KEYUP, 0)  # 释放按键win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)  # 释放按键# 点击 目录上的视频ActionChains(driver).move_to_element(video).perform()sleep(1)ActionChains(driver).move_to_element(video).click().perform()sleep(2)# 播放视频video_play = driver.find_element_by_class_name('xdyplayer')ActionChains(driver).move_to_element(video_play).click().perform()Window.find_window_wildcard(".*TTS.*")Window.set_foreground()win32api.keybd_event(32, 0, 0, 0)  # spacewin32api.keybd_event(32, 0, win32con.KEYEVENTF_KEYUP, 0)  # 释放按键

ev完成录制

                                    # ctrl + F2  结束win32api.keybd_event(17, 0, 0, 0)  # Controlwin32api.keybd_event(113, 0, 0, 0)  # F2win32api.keybd_event(113, 0, win32con.KEYEVENTF_KEYUP, 0)  # 释放按键win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)  # 释放按键

完整代码

考虑再三,还是一起发布了,保证项目的完整性。(若是有心并且有账户代码是可以用的,但是爬虫一般都具有时效性,后面就不该了,此代码仅供学习参考)

 allowed_domains  = ['http://www.xxxx.cn/']   # 屏蔽了网站driver.get('http://www.xxxx.cn/')  # 打开网页,屏蔽了网站driver.find_element_by_id("js_account_pm").send_keys("xxxxxxxxx@qq.com")  # 屏蔽了个人账户sleep(1)driver.find_element_by_id("js_password").send_keys("xxxxxxxx")   # 屏蔽了账户密码

代码如下


# -*- coding: utf-8 -*-
import json
import os
from time import sleepimport scrapy
import win32api
import win32con
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keysfrom tarena.control import WindowMgr, key_inputdays_enumerate = ["day1", "day2", "day3", "day4", "day5", "day6", "day7", "day8"]class LoadSpider(scrapy.Spider):name = 'load'allowed_domains = ['http://www.xxxx.cn/']start_urls = ['http://www.baidu.com']def parse(self, response):if os.path.exists("video_info.text"):with open("video_info.text", "r") as f:data = f.readlines()if len(data) > 0:file_info = json.loads(data[0])else:file_info = {}else:file_info = {}Window = WindowMgr()chrome_options = webdriver.ChromeOptions()path_dir = r'E:\workspace\crawler\hilqiqi0\chrome\User Data'chrome_options.add_argument('--user-data-dir=' + path_dir)  # 设置成用户自己的数据目录driver = webdriver.Chrome(chrome_options=chrome_options)driver.get('http://www.xxxx.cn/')  # 打开网页try:target = driver.find_elements_by_xpath('//a[@οnclick="checkTtsUser()"]')[1]ActionChains(driver).move_to_element(target).perform()sleep(2)ActionChains(driver).move_to_element(target).click().perform()# 校验跳转sleep(5)driver.find_element_by_class_name('tree-box-x').find_elements_by_xpath('./div')[2:4]  #[4:5] # [1:5]except:# 登陆driver.find_element_by_id("login_xxw").click()sleep(1)driver.find_element_by_id("js_account_pm").clear()sleep(1)driver.find_element_by_id("js_password").clear()sleep(1)driver.find_element_by_id("js_account_pm").send_keys("xxxxxxxxx@qq.com")sleep(1)driver.find_element_by_id("js_password").send_keys("xxxxxxxx")sleep(1)driver.find_element_by_id("js_submit_login").click()# 等待登陆成功sleep(5)target = driver.find_elements_by_xpath('//a[@οnclick="checkTtsUser()"]')[1]ActionChains(driver).move_to_element(target).perform()sleep(2)ActionChains(driver).move_to_element(target).click().perform()# 等待加载网页sleep(5)home_handler = driver.current_window_handle# 大类:# 第二阶段# 第三阶段# 第四阶段# 完成majors = driver.find_element_by_class_name('tree-box-x').find_elements_by_xpath('./div')[2:4]  #[4:5] # [1:5]for major in majors:major_text = major.find_element_by_xpath('./div').textprint(major_text)# 第一阶段 LINUX, PYTHON01, PYTHON02, PYTHON03, OOP,# 第二阶段 MYSQL, PYTHONTHREAD, PYTHONNET, MONGODB, PROJECT01,# 第三阶段 WEBBASIC01, WEBBASIC02, PYTHONWEB01, PYTHONWEB02, PYTHONWEB03,# 第四阶段 CRAWLER01, CRAWLER02, DATASCIENCE, AI01, AI02, PROJECT02,# 完成courses = major.find_elements_by_xpath('./ul')for course in courses:course_text = course.textprint(course_text)course_target = course.find_element_by_class_name('course-name-x')ActionChains(driver).move_to_element(course_target).perform()sleep(2)ActionChains(driver).move_to_element(course_target).click().perform()# 视频目录days = driver.find_elements_by_class_name('clearfix')day_index = 0for day in days:try:day_target = day.find_element_by_class_name('day-class')except:continueday_text = day_target.textif day_text == "":continue# 点击进入播放页面print(day_text)day_enumerate = days_enumerate[day_index]day_index += 1day_target = day_target.find_element_by_xpath('./a')ActionChains(driver).move_to_element(day_target).perform()sleep(2)ActionChains(driver).move_to_element(day_target).click().perform()# 网页切换all_handler = driver.window_handlesfor handler in all_handler:if handler != home_handler:driver.switch_to.window(handler)# 手动加载flash,谷歌需要点击一次while True:try:while driver.find_element_by_xpath('//a[@href="http://www.adobe.com/go/getflash"]').text == "这里":sleep(1)except:sleep(10)break# 视频页videos = driver.find_element_by_class_name('video-list').find_elements_by_xpath('./p/a')video_index = 0for video in videos:video_text = video.textprint(video_text)video_index += 1file_name = course_text + "_" + day_enumerate + "_" + str(video_index)file_value = course_text + "_" + day_text + "_" + video_textprint(file_value)if file_name in file_info:continue# 切换Windows窗口,查找EV录屏软件 ;开始录制 (3秒准备延时)Window.find_window_wildcard(".*EV.*")Window.set_foreground()# ctrl + F1  开始win32api.keybd_event(17, 0, 0, 0)  # Controlwin32api.keybd_event(112, 0, 0, 0)  # F1win32api.keybd_event(112, 0, win32con.KEYEVENTF_KEYUP, 0)  # 释放按键win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)  # 释放按键# 点击 目录上的视频ActionChains(driver).move_to_element(video).perform()sleep(1)ActionChains(driver).move_to_element(video).click().perform()sleep(2)# 播放视频video_play = driver.find_element_by_class_name('xdyplayer')ActionChains(driver).move_to_element(video_play).click().perform()Window.find_window_wildcard(".*TTS.*")Window.set_foreground()win32api.keybd_event(32, 0, 0, 0)  # spacewin32api.keybd_event(32, 0, win32con.KEYEVENTF_KEYUP, 0)  # 释放按键while True:try:if driver.find_element_by_class_name('tit').text == "重播":# ctrl + F2  结束win32api.keybd_event(17, 0, 0, 0)  # Controlwin32api.keybd_event(113, 0, 0, 0)  # F2win32api.keybd_event(113, 0, win32con.KEYEVENTF_KEYUP, 0)  # 释放按键win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)  # 释放按键sleep(1)print(file_name)key_input(file_name)file_info[file_name] = file_valuewith open("video_info.text", "w") as f:f.writelines(json.dumps(file_info))breakexcept Exception as e:print(e)sleep(2)pass## breaksleep(2)driver.close()# sleep(2)driver.switch_to.window(home_handler)# 向上拖拽driver.execute_script("arguments[0].scrollIntoView();", day_target)# break# 去除选择ActionChains(driver).move_to_element(course_target).perform()sleep(2)ActionChains(driver).move_to_element(course_target).click().perform()# 向上拖拽driver.execute_script("arguments[0].scrollIntoView();", course_target)# break# breakdriver.quit()  # 关闭Chrome浏览器,如果不写这句话浏览器就会停留在百度首页在后台运行不会关闭浏览器

无法抓取的视频,暴力破解之路相关推荐

  1. 抓取握手包暴力破解wifi

    抓取握手包,暴力破解 1.连接外置网卡,把网卡设为监听模式. 监听之前先把network-manager服务禁用:service network-manager stop 2.关闭有可能影响aircr ...

  2. python抓取网页视频

    在 Python 中抓取网页视频可以使用第三方库来实现,比如说使用 requests 库来发起 HTTP 请求,再使用 BeautifulSoup 库来解析 HTML 文档,最后使用 ffmpeg 库 ...

  3. idm抓取网页视频原理 idm抓取网页视频后怎么提取

    对于网页视频的下载,我们可以使用windows端多线程下载工具--Internet Download Manager,通过Internet Download Manager我们可以直接抓取网页视频,i ...

  4. burpsuite工具抓包及Intruder暴力破解的使用

    本专栏是笔者的网络安全学习笔记,一面分享,同时作为笔记 前文链接 WAMP/DVWA/sqli-labs 搭建 前言 仅供交流分享,禁止用于非法用途 上篇已经搭建好了靶机,这篇简单讲解工具burpsu ...

  5. Python抓取腾视频所有电影,不用钱就可以看会员电影

    大家好,今天我们来学习如何抓取电影,实现看剧自由~ 运行环境 IDE丨pycharm 版本丨Python3.6 系统丨Windows 实现目的与思路 目的: 实现对腾讯视频目标url的解析与下载,由于 ...

  6. python_抓取网页视频

    1.为何学python 编程语言方面,本科这几年一直都用C/C++,因为研究生方向与机器学习相关,所以最近大部分时间在学机器学习,看了<机器学习实战>这本书,里面的实例都是用python来 ...

  7. Scrapy 框架抓取美拍视频

    抓取美拍的数据并不算是很难 关键是他的视频url的加密算法是有点难搞. 打开美拍的网址我们查看一下源代码,他的网页加载方式跟其它的网站差不多,video_url也是在源代码中,但是我们仔细看,诺就是下 ...

  8. php爬虫实战(抓取美拍视频)

    抓取页面 地址:http://www.meipai.com/medias/hot public function getContentByFilegetcontents($url) {$content ...

  9. 40行代码教你利用Python网络爬虫批量抓取小视频

    1. 前言 还在为在线看小视频缓存慢发愁吗?还在为想重新回味优秀作品但找不到资源而忧虑吗?莫要慌,让python来帮你解决,40行代码教你爬遍小视频网站,先批量下载后仔细观看,岂不美哉! 2. 整理思 ...

最新文章

  1. 碉堡的小程序:用 Python 制作演示迷宫算法的 gif 动画
  2. windows不能在启动oracle,Windows不能在当地电脑启动OracleDBConsoleorcl
  3. 离线轻量级大数据平台Spark之MLib机器学习库Word2Vec实例
  4. javascript 函数和对象 再顺一顺
  5. php 扫描仪对接,Mac_Mac怎么连接扫描仪?苹果电脑Mac添加扫描仪教程,  有很多的用户需要用到扫 - phpStudy...
  6. jquery-validate 表单验证插件的使用
  7. mybatis之OGNL表达式
  8. 图书期刊信息管理系统c语言,基于C语言的图书馆管理系统.doc
  9. 数学小故事之 被柯西坑了的两个天才数学家——阿贝尔和伽罗瓦
  10. Ubantu系统中安装360Wifi步骤
  11. 梨都飞雪 2021-05-21
  12. 概述HTTPS,简单了解对称性加密算法、非对称性加密算法方式
  13. SAP License:SAP软件作用是什么
  14. jbpm工作流动态会签
  15. 【Apollo 6.0算法解析】Apollo EM Planner
  16. 【aspose】aspose-cells-21.1 For Java 除水印
  17. Request processing failed; nested exception is com.sun.jersey.api.client.UniformInterfaceException:
  18. CPU到底是怎么识别代码的?
  19. Oracle删除表从回收站恢复
  20. netcore 使用NHibernate

热门文章

  1. MYSQL 索引类型
  2. 【nginx】nginx重定向
  3. 平价运动耳机哪个牌子好、平价蓝牙运动耳机推荐
  4. 博看文思HTML教学视频,HTML5培训:博看文思带我进入移动互联网
  5. [数据分析] MATLAB计算列联表的卡方统计量
  6. Html div和span详解
  7. 厉害了,二本大学生这样拿下阿里 Offer!| 程序员有话说
  8. js和jsp文件后缀还在傻傻分不清?一文教你搞懂来龙去脉
  9. 坚果云和亿方云哪个云办公好用?
  10. ofo遭遇线上退押金挤兑潮:排队退款人数已超上千万人