开发这款小工具,我们需要做一些准备:

  • url.txt:多个需要顶起的帖子地址。
  • reply:多条随机回复的内容。
  • selenium:浏览器自动化测试框架

首先,我们先使用pip完成selenium的安装。

示例代码:

  1. pip install -U selenium

接下来,我们添加对浏览器的支持,这里使用火狐浏览器。

对应Windows环境下的火狐浏览器,我们需要下载一个小程序:geckodriver.exe

下载地址:http://download.csdn.net/download/xingbb99/10245371

把下载下来的压缩包解压缩,将exe文件直接放在项目文件夹中。

这里需要注意,如果火狐浏览器不是默认安装的话,需要将浏览器的安装路径添加到系统环境变量的Path中。

完成以上准备,我们就可以进行编程了。

一、导入必需的模块

示例代码:

  1. '''
  2. 想要学习Python?Python学习交流群:984632579满足你的需求,资料都已经上传群文件,可以自行下载!
  3. '''
  4. from selenium import webdriver # 导入网页内驱动模块
  5. from selenium.webdriver.common.keys import Keys # 导入按键类
  6. from selenium.webdriver.common.action_chains import ActionChains # 导入动作类
  7. from random import choice
  8. from time import sleep
  9. import re

二、创建浏览器测试对象

示例代码:

  1. profile = webdriver.FirefoxProfile(r'C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\nczl01ld.default')
  2. browser = webdriver.Firefox(profile, timeout=300) # 使用profile可以实现自动登录

三、定义将Cookie添加到测试对象的函数

Cookie的获取可以在火狐浏览器中打开贴吧地址后,按F12或右键菜单中选择【查看元素】,在打开的开发工具界面中,选择网络(NetWork),点开右侧收起的消息栏,点选【Cookie】复制其中的内容。

将Cookie内容存入变量,通过正则表达式获取字段并转换为字典后,添加到浏览器测试对象中。

示例代码:

  1. def cookie():
  2. cookies = '''
  3. BAIDUID = 012CCF2FAA983F21333F959FB4B2F4CF:FG=1;
  4. BDORZ = FFFB88E999055A3F86630C64834BD6D0;
  5. BDUSS = 9NcENVYWowcThKY3VUblVIZ3g...太长了此处省略一部分...S01U2AAABvKe1obyntaaG;
  6. BIDUPSID = 23A4C6D0C2851099D66FBFDBA99EDF3B;
  7. FP_UID = 0d8be11adc641cb5501f1e68270d8bea;
  8. H_PS_PSSID = 1457_21116_22072;
  9. MCITY = -131:;
  10. PSINO = 1;
  11. PSTM = 1506587758;
  12. '''
  13. cookiesList = re.findall(r'([\S\s]*?)=([\S\s]*?);', cookies)
  14. for cookie in cookiesList:
  15. ck = {'name': cookie[0].strip(), 'value': cookie[1].strip()}
  16. browser.add_cookie(ck) # 添加cookie到浏览器测试对象

四、定义随机获取评论内容的函数

示例代码:

  1. def get_content():
  2. file = open('reply.txt', encoding='utf-8').readlines() # 读取所有评论
  3. return choice(file).strip() # 随机获取一行评论并返回

五、定义写入评论并提交的函数

  1. 示例代码:
  2.  
  3. def reply():
  4. content = get_content() # 获取评论内容
  5. js = "document.getElementById('ueditor_replace').innerHTML='%s'" % content # 编写js脚本
  6. browser.execute_script(js) # 执行js脚本
  7. browser.find_element_by_css_selector('.poster_submit').click() # 点击发表按钮

六、定义主程序函数

  1. def main():
  2. count = 0
  3. for url in open('url.txt', encoding='utf-8').readlines(): # 逐行读取url文件
  4. count += 1
  5. if count >= 5: # 从url文件中的第5个地址开始回复
  6. browser.get(url) # 打开地址
  7. sleep(10) # 避免回复过快,地址打开后等待10秒钟。
  8. cookie() # 添加cookie
  9. browser.execute_script("window.scrollTo(0,document.body.scrollHeight)") # 滚动到页面底部
  10. reply() # 写入回复内容并提交
  11. sleep(5) # 等待完成提交
  12. ActionChains(browser).key_down(Keys.CONTROL).send_keys("w").key_up(Keys.CONTROL).perform() # 关闭网页

完成以上代码之后,我们运行主程序,就能够自动回复了。

注意:请申请小号进行测试,以免封号。

示例代码:

  1. if __name__ == '__main__':
  2. main()

完整代码

  1. from selenium import webdriver # 导入网页内驱动模块
  2. from selenium.webdriver.common.keys import Keys # 导入按键类
  3. from selenium.webdriver.common.action_chains import ActionChains # 导入动作类
  4. from random import choice
  5. from time import sleep
  6. import re
  7. '''
  8. 想要学习Python?Python学习交流群:984632579满足你的需求,资料都已经上传群文件,可以自行下载!
  9. '''
  10. profile = webdriver.FirefoxProfile(r'C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\nczl01ld.default')
  11. browser = webdriver.Firefox(profile, timeout=300) # 使用profile可以实现自动登录
  12.  
  13. def cookie():
  14. cookies = '''
  15. BAIDUID = 012CCF2FAA983F21333F959FB4B2F4CF:FG=1;
  16. BDORZ = FFFB88E999055A3F86630C64834BD6D0;
  17. BDUSS = 9NcENVYWowcThKY3VUblVIZ3g...太长了此处省略一部分...S01U2AAABvKe1obyntaaG;
  18. BIDUPSID = 23A4C6D0C2851099D66FBFDBA99EDF3B;
  19. FP_UID = 0d8be11adc641cb5501f1e68270d8bea;
  20. H_PS_PSSID = 1457_21116_22072;
  21. MCITY = -131:;
  22. PSINO = 1;
  23. PSTM = 1506587758;
  24. '''
  25. cookiesList = re.findall(r'([\S\s]*?)=([\S\s]*?);', cookies)
  26. for cookie in cookiesList:
  27. ck = {'name': cookie[0].strip(), 'value': cookie[1].strip()}
  28. browser.add_cookie(ck) # 添加cookie到浏览器测试对象
  29.  
  30. def get_content():
  31. file = open('reply.txt', encoding='utf-8').readlines() # 读取所有评论
  32. return choice(file).strip() # 随机获取一行评论并返回
  33.  
  34. def reply():
  35. content = get_content() # 获取评论内容
  36. js = "document.getElementById('ueditor_replace').innerHTML='%s'" % content # 编写js脚本
  37. browser.execute_script(js) # 执行js脚本
  38. browser.find_element_by_css_selector('.poster_submit').click() # 点击发表按钮
  39.  
  40. def main():
  41. count = 0
  42. for url in open('url.txt', encoding='utf-8').readlines(): # 逐行读取url文件
  43. count += 1
  44. if count >= 5: # 从url文件中的第5个地址开始回复
  45. browser.get(url) # 打开地址
  46. sleep(10) # 避免回复过快,地址打开后等待10秒钟。
  47. cookie() # 添加cookie
  48. browser.execute_script("window.scrollTo(0,document.body.scrollHeight)") # 滚动到页面底部
  49. reply() # 写入回复内容并提交
  50. sleep(5) # 等待完成提交
  51. ActionChains(browser).key_down(Keys.CONTROL).send_keys("w").key_up(Keys.CONTROL).perform() # 关闭网页
  52.  
  53. if __name__ == '__main__':
  54. main()

Python实现百度贴吧自动顶贴机的更多相关文章

  1. Python 版百度站长平台链接主动推送脚本

    如果自己的网站需要被百度收录,可以在搜索结果中找到,就需要将网站的链接提交给百度.依靠百度的爬虫可能无法检索到网站所有的内容,因此可以主动将链接提交给百度. 在百度的站长平台上介绍了链接提交方法,目前 ...

  2. Python获取百度浏览记录

    Python模拟百度登录实例详解 http://www.jb51.net/article/78406.htm Python实战计划学习作业2-1 http://blog.csdn.net/python ...

  3. Python爬虫-百度模拟登录(二)

    上一篇-Python爬虫-百度模拟登录(一) 接上一篇的继续 参数 codestring codestring jxG9506c1811b44e2fd0220153643013f7e6b1898075 ...

  4. 在Python命令行和VIM中自动补全

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1. VIM下的配置: wget https://github.com/rkulla/pydiction/arc ...

  5. python版恶俗古风自动生成器.py

    python版恶俗古风自动生成器.py """ python版恶俗古风自动生成器.py 模仿自: http://www.jianshu.com/p/f893291674c ...

  6. 百度移动搜索自动转码太坑爹,JS跳转地址会被抓取

    这段时间碰到个很崩溃的问题,一个页面通过 script 加载请求服务端进行统计再输出js进行跳转,分为两个步骤分别统计, 打开页面通过script 请求远程服务器进行统计并输出要通过js使页面跳转的最 ...

  7. 解决网页在手机浏览器打开不停刷新的方案(百度的ua自动转向js问题)

    一:发现问题 原有可能是网站内挂了一个百度的ua自动转向js,手机访问的话会被自动转到feiyujd.com,然后又被转到www点feiyujd点com,这样反复死循环.就形成了一直在刷新,网站一闪一 ...

  8. SEO -- WordPress怎设置百度站长链接自动提交

    百度站长平站更新了主动推送(实时)推送的方式,受到了广大站长的好评,但是对于使用WordPress的网站来说怎么设置自动提交呢,在这里介绍一种比较简单且有效的方法.我们可以使用 WP BaiDu Su ...

  9. Python教程百度网盘哪里有?

    Python为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量内容,被形象地称作"内置电池(batteries included)".带你快速入门的Py ...

随机推荐

  1. Python-wxpy继承关系

    聊天对象 通过机器人对象 Bot 的 chats(), friends(),groups(), mps() 方法, 可分别获取到当前机器人的 所有聊天对象.好友.群聊,以及公众号列表. 而获得到的聊天 ...

  2. luogu p1652 圆

    题目部分 题目描述 给出N个圆,保证任意两个圆都相离,然后给出两个点(x1,y1).(x2,y2),保证均不在某个圆上,要从点(x1,y1)到(x2,y2)画条曲线,问这条曲线最少穿过多少次圆的边界? ...

  3. linux内存源码分析 - 内存压缩(同步关系)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 概述 最近在看内存回收,内存回收在进行同步的一些情况非常复杂,然后就想,不会内存压缩的页面迁移过程中的同步关系也 ...

  4. linux内存源码分析 - 伙伴系统(释放页框)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 翻了一下之前的文章,发现竟然忘记写内核是如何释放页框的,罪过. 释放页框很简单,其实只有几步 检查此页是否被其他 ...

  5. Generative Adversarial Nets[AAE]

    本文来自<Adversarial Autoencoders>,时间线为2015年11月.是大神Goodfellow的作品.本文还有些部分未能理解完全,不过代码在AAE_LabelInfo, ...

  6. 开源框架bboss单点登录demo跑起来

    目前公司新项目要使用一个开源框架bboss的单点登录功能,要将此功能整合到新系统中去,所以我就学习了一下. 首先,进入这个bboss框架作者的博客中,找到相应的session共享,单点登录的博文,看了 ...

  7. Linux运维必会的MySQL企业面试题大全

    (1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...

  8. C# WPF仿360安全卫士11

    首先上效果图: 这是我的第一篇随笔,最近因为写一个播放器,开始学习WPF相关技术,随着不断入坑,播放器倒是做出来了,掉坑里了... 本着闲着也是闲着的精神,拿360开刀了: 主界面主要使用DMSkin ...

  9. CentOS 6 升级 curl

    zabbix 发邮件报 Support for SMTP authentication was not compiled in 其实出现这种问题的原因是我们机器上的 libcurl 版本太低所致.在z ...

  10. 使用Charles对iPhone进行Http(s)请求拦截(抓包)

    首先准备工具 1> Charles (下载对应操作系统的安装包进行安装,本文使用 macOS 进行演示) 2> iPhone (本文使用SE,系统版本:iOS 10) 开始 首先,对Cha ...