自制腾讯视频去除水印Chrome插件!厉害吧!
前景提要
前几期写了一篇关于谷歌插件制作的文章,但是因为没有正经的小实战,一直鸽了这么多期文章,这里写一篇比较受关注的腾讯视频的水印去除的文章,方便各位日后爬取腾讯视频的时候总带其水印爬虫。
学习制作谷歌插件对于爬虫喜欢使用 selenium 的人士有很大的帮助,可以解决访问网页出现的一系列问题。
回顾制作插件
简单介绍一下 manifest.json 配置文件里面所需要的参数。
- name 拓展的名字,必须是字符串类型
- version 字符串类型,是当前插件的版本号
- description 拓展的介绍信息
- permissions 是一个String数组,每一个权限都使用String来表示。某些关键权限在安装前会告知用户cookies 启动cookies权限tabs 启动管理Chrome浏览器标签栏权限activeTab 启动与当前页面交互的API权限contextMenus 启动右键菜单权限history 启动历史记录权限storage 启动本地存储数据权限debugger 启动使用debugger工具权限background 启动拓展后端环境
- browser_action 浏览器的右上角显示default_title 鼠标移入,显示简短描述default_popup 鼠标点击,弹出的显示内容default_icon 右上角拓展图标
- background 常驻后台脚本scripts 后台常驻,直到关闭浏览器一直执行的脚本popup 调试页面persistent 持久运行
- content_scripts 向页面注入脚本matches 匹配网址的正则列表run_at 选择注入JS的时机document_start:所有css加载完毕,但DOM尚未创建时document_end:DOM创建完成,但图片及frame等子资源尚未加载时document_idle:document_end之后,window.onload之前js 需要注入的脚本文件列表all_frames 是否运行在页面所有的frame中
- commands 使用命令 API 添加快捷键,并为它们绑定默认的组合键attach-debugger 命令名suggested_key 设置组合键description 命令描述
- manifest_version manifest文件版本号。Chrome18开始必须为2
Chrome拓展开发之去腾讯视频广告
去除广告的原理很简单,我们首先定位到元素面板的广告节点,然后用JS方法remove去除。
这里我们使用Chrome插件来实现,定位的函数是document.querySelectorAll,获取到的是DOM对象,因而可以直接使用它下属的remove方法去除。这里的定位CSS选择器我们需要根据具体的网站结构来编写。
这里的注入时机是在DOM渲染之后,也就是document.end。
全部代码如下
manifest.json 文件代码如下:
{ "manifest_version": 2, "name": "腾讯视频去除水印", "version": "0.0.1", "description": "解决腾讯视频爬虫出现水印的现象,进入谷歌后自动执行去除水印.", "author": "Lux", "content_scripts": [ { "matches": ["https://v.qq.com/x/cover/*"], "run_at": "document_end", "js": ["advertising.js"], "all_frames": true } ] }
advertising.js 代码如下:
var thread = function () { var nowTime = 0, maxTime = 15; var threadArr = []; this.addThread = function (fn) { threadArr.push(fn) } this.start=function () { doingThread(); } var doingThread = function () { if (threadArr.length > 0) { if (nowTime < maxTime) { let now = new Date().getTime(); var method = threadArr[0]; method(); threadArr.splice(0, 1); let nowNew = (new Date().getTime() - now); nowTime += nowNew; doingThread(); } else { nowTime=0; setTimeout(doingThread, 1); } }else { setTimeout(doingThread,100) } } } var fn = function () { img = document.querySelectorAll('img.txp_waterMark_pic') if (img.length == 1){ img.forEach(function(a){a.remove()}); return true; } else{ console.log('not img'); return false } } var thread = new thread(); thread.start() try{ for (let i = 0; i < 1000000; i++) { thread.addThread(function () { if (fn()){throw 'jumpout';} }) } }catch(e){}
谷歌扩展打包
在Chrome扩展程序下将代码打包进入 crx 中。
拿到crx之后即可分享给自己的小伙伴使用啦。
如有需要的小伙伴记得点击➡源码