快下班的时候,写了几十行的自动回复豆瓣贴子的代码,虽然最后没用上,不过类似的可以做很多事情啊,比如自动转发点赞微博啦(爬数据就别用了,这么慢累的慌),哈哈!

主要就是用Selenium模拟浏览器行为(所以用一般Selenium都是做web自动化测试咯),不过既然要自动嘛,我就放服务器上自动运行了,可是服务器木有显示器,只能ssh,好在pyvirtualdisplay可以做一个虚拟显示,服务器上需要安装xvfb

(使用yum install Xvfb, 参考)。

在自己电脑上测试用的Chrome,服务器上用的Firefox。首先是模拟登录,也是为了获取cookie(只要在cookie有效期内),不然登录次数多了需要输入验证码(可以使用tesseract将图片识别为文字,比自己写的很强大,《机器学习实战》第2章k-近邻算法有一个手写识别系统的例子)。

Python 贴吧评论帖子 python贴吧自动发帖_输入框

find_element_by_id/name/class_name/tag_name

等等这一些都是根据html标签属性获取元素的,说白了就是找到要找的输入框和按钮(Chrome可以直接在网页输入框和按钮的位置上右键-检查,就能看到了,参考)。

找到了输入框可以用send_keys()发送文字,相当于输入用户名密码这一步,下一步找到登录按钮.click()操作就可以了,这时候可以使用get_cookies()获取当前的cookie,获取到之后保存到文件里(保存对象推荐使用pickle,当然也可以直接write字符串到文本文件里)。

下一步就是找到要评论的贴子地址(不用登录,只需要把cookie加进去就可以了),找到评论框,输入文字(可以是提前写好的任意文字加标点的组合),点击发布了。

下面的代码,或者写个循环每几分钟评论一下再sleep()一会儿,或者写个crontab定时启动,此外,如果想长期运行我后来还加了cookie更新操作。

Python 贴吧评论帖子 python贴吧自动发帖_输入框

最后,别忘了关闭driver.close(),停止display.stop()

很多地方写的都不够好,因为我写的这个driver真的不是老司机啊