selenium+python 的微博自动转赞评功能实现

放假了,没人比我更无聊,在家制作了一个selenium+python的微博自动转赞评程序。

程序分为四部分,依次是:登录+点赞+评论+转发,当点赞达到用户上限时去评论,评论至上限时去转发,出现验证码则退出程序。演示视频如下:

微博自动转赞评至上限程序

 

一、登录

调用谷歌浏览器+打开微博登录账号

二、点赞

点赞程序的基本原理就是,先让滚动条定位至待点赞的那一条评论,然后寻找赞按钮进行点击,这个操作好理解而且没什么难度。难点在于,当用户点赞数达到上限时,程序运行过程中会一直点击同一条评论的赞。原因是点赞数达到上限后,就算点击了赞按钮,系统也会取消该赞,该赞的状态还是like而不是liked,而程序的运行步骤是寻找like属性的赞进行点击,所以就会卡在一条评论上循环点赞,而不是跳出循环去评论。

这个时候,我找到的解决方法是这样的,创建一个列表,将点赞的内容通过list.append(target.text)放入列表,比较list[x]和list[x-1]的值是否一致,如果一致,表示两次定位like的内容是同一条评论,那么执行跳出程序。这里要注意的是,比较的条件要从x>=1开始,否则会报错,因为列表的第一项就是x[0],不可能和x[-1]比较。

判断点赞是否达到上限
判断点赞是否达到上限

 

因为我并非从事程序开发行业,只是觉得应该重拾自己的开发技艺,所以开始学习新技术并打算将学习过程记录下来,在编写这个点赞程序的过程中,我有以下总结:

1、break只能跳出当前循环,如果存在多层循环,如何做到终止内部循环连带外部循环一起终止呢?

我们可以用变量exit_flag来控制循环。编写条件判断,当exit_flag==0时,运行外部循环,当exit_flag==1时,break掉外部循环。exit_flag的初始值为0,当内部循环终止时,只需要让变量exit_flag=1即可。

2、try-except的用法

这里我拿滚动条举例,我希望程序自动跳过已经被点赞的内容去寻找还未点赞的内容,但寻找内容的过程中,很大可能性要用到滚动条将评论内容往下翻才能找到,这时候,就可以用try-except。

try-except控制滚动条滚动
try-except控制滚动条滚动

 

运行try寻找状态为like的赞的位置,但凡try里面有一行程序是无法运行的,就会跳转至except,去执行except里面的程序。这样,就刚好能实现当无法在当前页面找到待点的赞,则滚动页面的功能。

三、评论

评论和转发相对于点赞,则简单很多,只需要找到相应的按钮元素,进行点击和发送即可。

这里的重难点同样是当评论达到上限时,会跳出2秒钟的提示框“您的评论太多,休息一会吧”并消失,那我如何判断是否弹出此提示框呢?我发现,虽然是弹窗,但这个弹窗是属于网页的一部分的,所以其元素仍然可以在网页中找到,关键在于,弹窗只有两秒钟的出现时间,我如何在短短两秒钟之内捕捉弹窗?

于是我采用了冻结界面的方式:在F12的 consle里输入——

setTimeout(function(){debugger;},3000),代表3秒后页面就被冻结。

冻结网页

 

在这里我们要凭感觉做的事情就是,在consle中按下回车键,让提示框在第3秒页面被冻结的那一刻出现就行了。

由此,我成功地判断了提示框是否弹出,如果提示框出现,则运行转发程序。

判断对话框是否弹出

四、转发

转发和评论的原理一模一样,只不过是判断验证码界面是否弹出,如果弹出,就退出浏览器,即:wd.close()。

五、小结

做这个转赞评程序让我学会了如何使用selenium和python实现网页端的自动化。selenium的核心其实就是能够准确选择元素,通过绝对路径选、相对路径选、通配符选、属性选、范围选、组选、父节点选、兄弟节点选,反正就是各种选。

虽然使用最基础的选择方式是足够完成项目的,但我还是尽量多地混搭着选择方式在使用。区别在于:就像人们能靠最基本的两条腿走天下,但同时人们还可以选择坐SUV、坐飞机、坐火箭走天下一样,基本方法可以完成任何项目,利用更多的交通工具或许更高效。

selenium就学到这里,有一点遗憾的就是在这个项目中没有使用到ActionChains 类模拟鼠标右键点击、双击、移动鼠标到某个元素、鼠标拖拽等动作;没有尝试让浏览器直接运行一段javascript代码,并且得到返回值。只得等以后遇到“有缘分”的项目再来尝试。

毕竟程序就是这样,学基本语法规则如同走马观花,是假学,只有用起来才知道哪些是木棍可丢弃,哪些是尖刀可杀敌。

 

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值