博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
qq空间自动点赞
阅读量:5882 次
发布时间:2019-06-19

本文共 2239 字,大约阅读时间需要 7 分钟。

前言

前端时间尝试用爬虫爬取某jd的商品数据,然后发现普通方式(辣鸡的我)爬取不到。然后了解了一下selenium这个神器,然后就有了这个点赞demo。这是 ,当然你也可以拉跑在本地。

基本功能的实现

首先要导入selenium-webdriver库,然后安装对应浏览器的driver,我这里使用的与chrome对应的chromedriver(注意对应浏览器版本)。

有了selenium库,我们可以通过代码来控制浏览器模拟用户行为,这也是为啥大部分反爬措施对selenium无效的原因。以下为登陆qq空间的操作代码:

var driver = new webdriver.Builder().forBrowser('chrome').build(); //创建一个chrome 浏览器实例   driver.get("https://user.qzone.qq.com/qq账号"); //打开qq空间地址   driver.switchTo().frame(driver.findElement(By.id("login_frame")));  //切换登陆功能对应的iframe(不执行该步骤,后续点击操作会失效)   driver.findElement(By.id("switcher_plogin")).click()    //账号密码登陆按钮点击   driver.executeScript('document.getElementById("u").value="qq账号"')   driver.executeScript('document.getElementById("p").value="密码"')   driver.findElement(By.id("login_button")).click()   //登陆   driver.manage().window().maximize(); //最大化浏览器   driver.switchTo().defaultContent();   dianzan(driver) //调用点赞功能函数复制代码

登陆完成之后,我们就可以通过click点赞标签来实现点赞了。

但是在demo第二次运行的时候,发现点过赞的被点了取消,因此我们需要对点击操作做一个过滤,只对没用点赞的标签进行点击。通过对比发现,qq空间的点赞图标并不是用的iconfont矢量字体,而是用的雪碧图定位,那么我们就可以通过定位值来做是否已赞判断。

driver.findElements(By.className("fui-icon icon-op-praise")).then((arr)=>{        for(let i=0;i
{ if(v=='-52px -921px'){ console.log(i,'已赞') }else{ console.log(i,'点赞') arr[i].click() } }) } })复制代码

再次执行demo,发现重复点赞问题已解决,但是又有一个新问题:因为qq空间使用了懒加载,当天的说说比较多的时候首次加载并不会加载全部,点赞就只能点到当前加载的部分。我们需要添加一个说说日期判断,当已加载说说包含昨日说说时,说明已加载全部今日说说;否则执行滚动条下拉操作,加载更多说说。

这里根据时间标签内的文本长度来做日期判断。

driver.findElements(By.className("info-detail")).then((arr)=>{        arr[arr.length-1].getText().then(v=>{            if(v.length>5){ //当前已经加载非当日说说                console.log('当天的说说已经赞完了')                driver.quit()                driver.sleep(24*60*60*1000)     //点赞时差                openChrom()            }else{                driver.executeScript('document.documentElement.scrollTop=100000');          //模拟滚动加载更多动态                dianzan(driver) //递归调用            }        })    })复制代码

至此基本功能已经实现,放在服务器就可以每天自动点赞一次(朕已阅,完美~~)。

web控制

点赞功能虽然实现了,但是并不能直观展示在前端,而且账号还是固定写死在代码里的。然后鄙人用node写了个后台,前端传账号密码过去,后台接收后执行点赞部分代码。如果更进一步,可以在后台把账号密码存入数据库然后每日遍历就可以实现多账户自动点赞。作为一个弱鸡前端,后台代码就不贴出来了,如果需要请看。

转载地址:http://wktix.baihongyu.com/

你可能感兴趣的文章
写在前面
查看>>
数据库设计时间字段
查看>>
shell文本操作
查看>>
PHP分页代码中的SQL语句可以换个写法
查看>>
加载样式js
查看>>
数据库之数据排序
查看>>
struts2将数据通过Json格式显示于EasyUI-datagrid数据表格
查看>>
牛客21天刷题_day#3
查看>>
Appium-We wanted {"required":["value"]} and you sent ["text","sessionId","id","value"]
查看>>
Classification Truth Table
查看>>
JVM学习:对象的创建和内存分配
查看>>
JavaScript基础精讲
查看>>
C++ 静态变量 全局变量 const
查看>>
vs 高级保存选项的设置
查看>>
Java读取文本指定的某一行内容的方法
查看>>
软件工程敏捷开发04
查看>>
我的Android进阶之旅------>Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能...
查看>>
全链路自动化测试
查看>>
ubuntu 14.04 上配置vlc组播源
查看>>
在ASP.NET MVC 中获取当前URL、controller、action
查看>>