JavaScript是什么?
JavaScript是跨平台、面向对象的 Web编程脚本语言。绝大多数网站都使用JavaScript,所有现代Web浏览器(无论是桌面、平板还是手机浏览器)都包含JavaScript解释器,这让JavaScript成为有史以来部署最广泛的编程语言。过去十年,Node.js 让浏览器之外的JavaScript编程成为可能,Node的巨大成功意味着JavaScript如今也是软件开发者最常用的编程语言。
Stack Overflow 联合创始人 Jeff Wood 曾说过,任何一个能用 JavaScript 编写的应用系统,最终都必将使用 JavaScript 实现。
为什么JavaScript是网页爬虫的最佳选择
-
绝大多数网页都使用JavaScript开发。
-
浏览器可以直接运行JavaScript。
-
网页内容由HTML编写或JavaScript动态生成,JavaScript可以直接操作DOM,获取网页内容非常容易。
-
现在很多网页流行JavaScript动态生成,传统获取网页源代码的方式无法爬取内容,但是对于浏览器中的JavaScript来说根本不存在这种问题。
-
不需要设置cookie,因为浏览器已经为我们保存了。
使用JavaScript实现评论区自动点赞
1.使用浏览器自带的开发者工具找到点赞的元素
2.使用开发者工具多找几个点赞的元素,从中找到共同点
document.querySelectorAll("div.info > span[class='like ']")
上面这段JavaScript代码获取了所有能看见的点赞元素,这是一个数组。
3.触发一个点赞事件
document.querySelectorAll("div.info > span[class='like ']")[0].click()
上面这段JavaScript代码演示了给第一条评论点赞。
4.批量点赞
let likebtns=document.querySelectorAll("div.info > span[class='like ']");//获取点赞元素列表
let likebtnsiter=likebtns.entries();//数组转换为迭代器
let ccgjtimer=setInterval(()=>{//定时器每隔1000毫秒执行点赞
let nextele=likebtnsiter.next();
if(nextele.done){//元素点赞完成清除定时器
clearInterval(ccgjtimer);
alert("点赞完毕!");
return;
}
nextele.value[1].click();//执行点赞事件
},1000);
感兴趣的小伙伴可以复杂上面的代码找一个视频,实验一下点赞效果。这就是JavaScript的魅力,没有复杂的逻辑,短短11行代码就完成了评论批量点赞,为了防止被B站制裁我们使用定时器每隔1000毫秒执行一次点赞操作。
Tampermonkey扩展的使用
为了点赞每次要打开开发者工具运行代码非常不方便。幸好有Tampermonkey这个扩展可以帮助我们解决这个问题。Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器,它适用于 Chrome, Microsoft Edge, Safari, Opera Next, 和 Firefox。
1.安装Tampermonkey
以edge浏览器为例,在地址栏输入地址:https://microsoftedge.microsoft.com/addons/search/Tampermonkey
安装绿黑版本。安装后需要启用Tampermonkey扩展
2.在Tampermonkey中添加新脚本,并把点赞代码复制粘贴到// Your code here…位置
最终结果如下:
https://www.bilibili.com/video/*
// @icon https://www.google.com/s2/favicons?domain=bilibili.com
// @grant none
// ==/UserScript==
(function() {
use strict;
let likebtns=document.querySelectorAll("div.info > span[class='like ']")
let likebtnsiter=likebtns.entries();
let ccgjtimer=setInterval(()=>{
let nextele=likebtnsiter.next();
if(nextele.done){
clearInterval(ccgjtimer);
alert("点赞完毕!");
return;
}
nextele.value[1].click();
},1000);
})();" class=" language-javascript">// ==UserScript==
// @name B站评论区点赞
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match
在浏览器中JavaScript作为爬虫的问题
可以看出来只要是在浏览器中的操作JavaScript都很方便,但是由于浏览器的安全限制,JavaScript有无法直接读写本地文件,无法跨域请求的问题。还好现在有Nodejs可以帮助我们解决这个问题。但是在这里我想提出另一种解决方案NW.js (原名 node-webkit)和Electron,他们是基于 Chromium 和 node.js 的应用运行时,通过它可以用 HTML 和 JavaScript 编写原生应用程序。它还允许你从 DOM 调用 Node.js 的模块 ,实现了一个用所有 Web 技术来写原生应用程序的新的开发模式。
后记
后来我又想了一下,我发现还是想复杂了,其实不用写的那么复杂,只需要判断点赞按钮是否存在就行了。
史上最简单的点赞代码如下:
setInterval(()=>{
let likebtn=document.querySelector("div.info > span[class='like ']");
if(likebtn){
likebtn.click();//点赞事件
}
},1000)
有细心的网友发现这只能点赞加载出来的网页,后来我继续顺着这个思路发现想点赞所有的评论也很简单。思路是这样的,如果找到【点赞】按钮就点击它,如果找不到【点赞】按钮就寻找【点击查看】按钮,如果找到【点击查看】按钮就点击它,然后就会加载新的评论,如果【点击查看】里的评论被点完了就寻找【下一页】按钮,如果找到【下一页】按钮就点击它,当找不到【下一页】按钮时说明加载的评论已经点赞完毕,我们需要向下滚动滚动条加载新的评论。
let zancount=0;
setInterval(()=>{
let likebtn=document.querySelector("div.info > span[class='like ']");
if(likebtn){
console.log('点赞',zancount++,'次');
likebtn.click();//点赞事件
}else{
console.log('1.没有找到【点赞】按钮,尝试寻找【查看更多】按钮!');
let morebtn=document.querySelector("a.btn-more");
if(morebtn){
console.log('找到【查看更多按钮】!');
morebtn.click();//查看更多事件
}else{
console.log('2.没有找到【查看更多】按钮,尝试寻找【下一页】按钮!');
let nextbtn=document.querySelector("div.paging-box > a.next");
if(nextbtn){
console.log('找到【下一页】按钮!');
nextbtn.click();//下一页事件
}else{
console.log('3.没有找到【下一页】按钮!向下滚动!');
scrollBy(0,500);//向下滚动500
}
}
}
},1000);
这里需要说明一下scrollBy(x,y)这个滚动是在当前位置的基础上继续滚动(x,y)的距离,不需要scrollTo(x,y)那样自己计算滚动坐标。
同时这里记录一下如何获取滚动条的位置:
function ScollPostion() {
var t, l, w, h;
if (document.documentElement && document.documentElement.scrollTop) {
t = document.documentElement.scrollTop;
l = document.documentElement.scrollLeft;
w = document.documentElement.scrollWidth;
h = document.documentElement.scrollHeight;
} else if (document.body) {
t = document.body.scrollTop;
l = document.body.scrollLeft;
w = document.body.scrollWidth;
h = document.body.scrollHeight;
}
return {
top: t,
left: l,
width: w,
height: h
};
}
//来源:https://www.cnblogs.com/ban-s/p/js-scroll-coordinate.html