本文介绍,回复贴吧指定某楼层主的帖子的方法。在这里不介绍无限发主贴和无限回复主贴的方法,无限发主题帖会爆吧,引起别人的反感,并且很容易遭到吧主的封杀;无限回主题帖,会让整个帖子的每楼的回复充满了自己的内容,严重影响别人阅读回帖,可能被举报遭到吧主禁言。只要看了本文就可以无限回帖了,如果需要改成发主题帖或者回主题帖,那肯定只会比这简单,自己理解修改下就可以了。

一般向系统里面添加数据,无非就几种手段,普通人最常用的是用浏览器或者app手动发帖回帖。

第二种是使用类似qtp  selenium之类的自动化测试工具,自动操作浏览器来进行发帖。

第三种是使用jmeter lr python的requests或者urllib之类的,通过抓包分析,然后请求发帖的接口。

第四种是直接向数据库中插入发帖数据,但百度的数据库密码我们肯定是破解不了的,不适合这种方法。

所以本文主要讲述第二种和第三种发帖。

在这里不介绍qtp发帖,者工具太庞大了,并且是收费软件。python安装的人比较多,所以介绍python+selenium回帖。

通过接口方式回帖,以python的requests为例。

话不多说,上代码。

 1 #coding=utf-8 
2 from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import re,time
##########加载profile,可以免登陆
#profile = webdriver.FirefoxProfile(r'C:\Users\Administrator\AppData\Local\Mozilla\Firefox\Profiles\urkg7uqr.default')
#driver = webdriver.Firefox(profile,timeout=300) #driver = webdriver.Firefox(timeout=50)
driver=webdriver.Chrome()
driver.get('https://tieba.baidu.com/p/4778694923')
str_cookie='BIDUPSID=1B0EC2BA376CBF4E68F4952620B2C7A6; PSTM=1491645170; BDUSS=3NNcWtmZHI2MXdqaE55MUhUN35EYTR-cHppV2VCdDYxLXE5T3Z5eTVvNlhRQkJaSVFBQUFBJCQAAAAAAAAAAAEAAAAw2CBnudvS9LTzyqrAsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJez6FiXs-hYa; BAIDUID=17ECF3B92FDCAFB2D548C94DXXXXXXX:FG=1' #cookie字符串用f12查看网络中的请求贴吧的,请求头中的cookie
list=re.findall('([\s\S]*?)=([\s\S]*?); ',str_cookie+'; ')
for l in list:
ck={'name':l[0],'value':l[1]}
print ck
driver.add_cookie(ck) #来个正则把cookie字符串转成slenium的cookie格式字典,添加到driver。cookie字符串是请求贴吧时用f12查看的 network的headers的请求头的cookie,复制就可以了,这样selenium也可以免登陆
driver.get('https://tieba.baidu.com/p/4778694923') ###########回主贴,写内容但不回帖
driver.find_element_by_id('ueditor_replace').click()
time.sleep(5) #停5秒钟可以发现上面的代码click已经自动拖到页面底部了,没有必要先点击输入框直接赋值也可以,考虑到模拟正常情况,还是点击下,因为百度有些post参数是动态的。
js="document.getElementById('ueditor_replace').innerHTML='abc'"
driver.execute_script(js) all=driver.find_elements_by_css_selector('div.l_post') ###获取所有层主的外层div
print all
for a in all:
#print a.text,'*************************\n'
bt=''
try:
bt=a.find_element_by_id('post_content_106859548218') ####回复指定的层主 except Exception,e:
pass
if bt!='':
#a.find_element_by_class_name('lzl_link_unfold').click() #首次回复
try:
bt.click() #这句会报错,但可以帮助跳到指定层主,非常有用,如果不跳到指定层主的位置,就会定位不到那个层主的‘我也说一句’的按钮,百度贴吧会在我们离开层主的视界后自动收缩层主的跟帖,所以会造成定位不到。肉眼很难观察到,用f12反复关闭和打开,再搜索可以看到。
except Exception,e:
pass
     time.sleep(3)
print a.tag_name
print a.text,'\n*****************************************************************'
for i in range(1000):
#driver.find_element_by_xpath('//*[@id="j_p_postlist"]/div[22]/div[2]/div[2]/div[2]/div[2]/ul/li[6]/a').click() #这种方式不靠谱,前面插了广告或者删了帖子,可能回复层别的层主了
a.find_element_by_class_name('j_lzl_p').click()
#a.find_elements_by_partial_link_text('我也说一句')[0].click() ##我也说一句按钮 driver.find_element_by_id('j_editor_for_container').click()
driver.execute_script('document.getElementById("j_editor_for_container").innerHTML="hello"')
driver.find_element_by_css_selector('.lzl_panel_submit').click() time.sleep(60) #每隔60秒回帖 从第28行道49行繁琐了一些,功能主要是跳转到指定的层主的页面位置,换种方法也可以这样
floor=dr.find_element_by_xpath('//span[contains(text(),"21楼")]') dr.execute_script("arguments[0].scrollIntoView();", floor) time.sleep(2) #再去定位元素 tar = dr.find_element_by_xpath('//div[contains(@data-field,"157780442")]//a[contains(text(),"我也说一句")]') tar.click()

下面来上的是requests代码

#coding:utf-8
import requests
import re
import json
import time
ss=requests.session() str_cookie='BAIDUID=9BB79332C64C55ADFF47BB66E2XXXXXXXXX:FG=1; PSTM=1490700622; BIDUPSID=E5593392C48A25ACD2751413DE5A5707; TIEBA_USERTYPE=ab202a741d89ac4664dafb03; bdshare_firstime=1491115637991; BDSFRCVID=A08sJeC62ZvIB7ciINso-O6ye2xAuYRTH6aouvwQVMCH1Qmt0l4GEG0PqM8g0KubLsfKogKK3gOTH4rP; H_BDCLCKID_SF=tJuO_I8afI83fP36q4r2DjvWqxby26nCtnbeaJ5nJDoAflTtjPbEyfCyhgc9tJc-tjbCLxT4QpP-HJ7G5RJG3xudyaQI2R0jannxKl0MLPjYbb0xynoDXbtEyUnMBMPe52OnaIb-LIcjqR8Zj6KajTbP; bottleBubble=1; pgv_pvi=3998808064; pgv_si=s197984256; BDRCVFR[S_ukKV6dOkf]=mk3SLVN4HKm; PSINO=6; H_PS_PSSID=1448_19035_21084; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; TIEBAUID=3b218806eb200790fd2ae7b1; BDUSS=F-LVMwU09YOVBpcEZwZjlYRVlEbVY0MjZNZ0dWU1dTaHdvM0k2UmZYQ3hSaEJaSVFBQUFBJCQAAAAAAAAAAAEAAAAw2CBnudvS9LTzyqrAsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALG56FixuehYNH; STOKEN=5cb27861dad46603e26d289c5a8ec87c75e0acaf2a2ad105c34cf3c029c9f757; wise_device=0; LONGID=1730205744;'
reg='([\s\S]*?)=([\s\S]*?);'
dict_cookie={}
for c in re.findall(reg,str_cookie):
dict_cookie[c[0]]=c[1]
print 'dict_cookie:',dict_cookie ###cookie字符串转字典,也可以直接把cookie字符串携带在requests的请求头中实现登录 user_agent_list = ['Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400'
]
header={}
import random
dict_data={
'ie':'utf-8',
'kw':'中华城市',
'fid':'',
'tid':'',
'floor_num':'',
'quote_id':'',
'rich_text':'',
'tbs':'1d2e70d051724ba01491647010',
'content':'啦啦啦',
'lp_type':'',
'lp_sub_type':'',
'new_vcode':'',
'tag':'',
'repostid':'',
'anonymous':'', } ####抓包得到的
dict_data['kw']='中华城市' 了 #重要,不能填错
dict_data['fid']='' #fid是贴吧什么时候建的,可以抓包也可以用上面的获取fid的接口得到,fid指的是贴吧是第多少个建的贴吧,数字越小,说明贴吧建的越早
dict_data['tbs']='1d2e70d051724ba01491647010' ##这个值是有生命周期的,用个天把时间没问题
dict_data['tid']='' ##tid指的是主题帖子的id
dict_data['floor_num']='' ###这个不重要,随便多少都可以
dict_data['quote_id']='' #用f12定位看以看到post_id字段,指的是层主帖子的id
dict_data['repostid']=dict_data['quote_id']
dict_data['content']='啦啦啦德玛西亚' #content顾名思义是回复的内容了,除了这几个外其他的data参数都可以不修改。 #获取fid的接口 ,吧name换成贴吧名字,复制到浏览器地址栏回车就ok了http://tieba.baidu.com/f/commit/share/fnameShareApi?ie=utf-8&fname=%E6%B5%A0%E6%B0%B4%E4%BA%8C%E4%B8%AD i=0 while(1):
i=i+1
try:
header['User-Agent']=random.choice(user_agent_list) ##习惯性的学爬虫来个随机换user-agent,但贴吧和知乎 这种都是基于账号追踪的,换ua和代理ip是没有任何作用的,逃避不了被识别为机器人
header['Connection']='close'
header.update({ 'Host':'tieba.baidu.com','Origin':'http://tieba.baidu.com','Referer':'http://tieba.baidu.com/p/5065229106'}) dict_data['content']='哈哈哈哈'+str(i) res=ss.post('http://tieba.baidu.com/f/commit/post/add',cookies=dict_cookie,data=dict_data,headers=header)
res_content=res.content
res_text=res.text print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),' ',json.dumps(json.loads(res_content),ensure_ascii=False) ###这样可以清楚的看到json里面的\u xxxx之类的对应的中文。 if '"err_code":0' not in res.content: ##errcode0表示回帖成功了 i=i-1 if '"err_code":220034' in res_content:
time.sleep(300) #说话太频繁,这时候不要太快回帖了,回了也没用,会连续返回errcode220034
if '"need_vcode":0,' not in res_content:
#print res_content
print u'需要验证码'
time.sleep(180) ###如果回复太快了会弹出验证码,等一段时间不回帖就好啦。
except Exception,e:
#i=i-1
print e
time.sleep(10) ##每隔10秒回帖

上面就是介绍的两种方法了,一个从ui界面上回帖,一个从接口回帖。

用slenium回帖的好处是,不需要抓包理解http接口,和反复的测试总结出某些参数的意义和作用。上面的slenium代码没有加入处理验证码和禁言一段时间的情况。需要加上才能保证程序一直是可运行的,增强容错能力,不至于程序中断退出。

用requests的回帖方式,需要抓包,并且post参数中有个值是动态并且有生命周期的,这个不容易把握,好处是发帖速度非常快,如果不考虑百度限制的话,requests的回帖速度是slenium的几十倍甚至上百倍。

好了,介绍完了,那么大家需要注意的是,不管是selenium还是requets回帖,不要把回帖间隔设置的太小,否则轻则容易出很多验证码,中则禁言几个小时,重则永久性的被全吧范围封号之后无法使用回帖功能了。

百度贴吧自动回帖的两种方式,使用requests(urllib2)和selenium两种方式回帖的更多相关文章

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

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

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

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

  3. 使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实

    2.使用工厂方法模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...

  4. 1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程

    1.使用简单工厂模式设计能够实现包含加法(+).减法(-).乘法(*).除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果.要求使用相关的工具绘制UML类图并严格按照类图的设计编写程 ...

  5. thinkphp 的两种建构模式 第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用。第二种架构模式两个单入口文件,分别生成两个应用定义define。。。函数可以定义配置文件。。。。

    thinkphp 的两种建构模式  第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用. ...

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

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

  7. python将两个数组合并成一个数组的两种方法的代码

    内容过程中,把写内容过程中常用的内容收藏起来,下面的资料是关于python将两个数组合并成一个数组的两种方法的内容,希望能对小伙伴们有帮助. c1 = ["Red","G ...

  8. http发送请求方式;分为post和get两种方式

    http发送请求方式:分为post和get两种方式

  9. 百度地图之自动提示--autoComplete

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. javascript 实现类似百度联想输入,自动补全功能

    js  实现类似百度联想输入,自动补全功能 方案一: search是搜索框id="search" //点击页面隐藏自动补全提示框 document.onclick = functi ...

随机推荐

  1. [Flask]jinja2渲染分页导航部件

    注意: 1.在视图函数中通过request.args.get('page')获取page数,并将page传给macros.html模板文件 效果: 点击8,就跳转到第8页数据了 视图函数 @app.r ...

  2. 阶段3 2.Spring_03.Spring的 IOC 和 DI_2 spring中的Ioc前期准备

    适应配置的方式解决我们刚才的编码操作 -dist结尾的就是spring 的开发包 解压好的 这里面是约束 libs是扎包 三个为一组,实际上只有21个 自己在使用需要导入jar包的时候,选择这种没有任 ...

  3. 基于 Node.js 的服务器自动化部署搭建实录

    基于 Node.js 的服务器自动化部署搭建实录 在服务器上安装 Node.js 编写拉取仓库.重启服务器脚本 配置 Github 仓库的 Webhook 设置 配置 Node.js 脚本 其他问题 ...

  4. Python 测试代码覆盖率统计工具 coverage.py

    安装 您可以通常的方式安装coverage.py.最简单的方法是使用pip: $ pip install coverage 要安装预发布版本,您需要指定--pre: $ pip install --p ...

  5. node.js入门经典 初读笔记

    2.1 npm是什么 npm(Node Package Manager)是Node.js的包管理器.它允许开发人员在Node.js应用程序中创建.共享并重用模块. 2.3 安装模块 npm insta ...

  6. eclipse 包含头文件出错

    最近这段时间自己在写游戏的框架,在做的过程中遇到了一个问题:没办法#include <iostream>,在eclipse下F3也找不到对应的 iostream 文件, 最后在晚上找资料, ...

  7. Opencv中直方图函数calcHist

    calcHist函数在Opencv中是极难理解的一个函数,一方面是参数说明晦涩难懂,另一方面,说明书给出的实例也不足以令人完全搞清楚该函数的使用方式.最难理解的是第6,7,8个参数dims.histS ...

  8. CTF—攻防练习之FTP服务后门

    主机:192.168.32.152 靶机:192.168.32.156 首先查看靶机开放的端口: nmap 192.168.32.156 nmap  -T4 -A -v 192.168.32.156 ...

  9. ps和top进程监控

    一.名词解释 1.什么是进程(what is process)? 答:进程是程序运行的过程,伴有动态,生命和运行状态.(组成:1.已分配内存的地址空间  2.安全属性,包括所有权凭据和特权  3.程序 ...

  10. Mac 如何将apache的这个默认目录更改到用户目录下

    如何将apache的这个默认目录更改到用户目录下. 做如下更改即可: 1.在自己的用户目录下新建一个Sites文件夹,我的用户目录为gaocuili 2.进到cd /etc/apache2/users ...