B站抢楼是一个很好玩的事情,每当新番出新集时。总有很多人想能够在前排发表评论,但是因为人数众多,往往不能如愿,今天就教大家一个抢楼的好办法。

我们平时抢楼的整个流程是这样的:

1.在官方放出的新番更新时间时等待

2.到时间后一直不停的刷新网页,等待新集数网页链接出现,出现后点击进入

3.等待网页载入完成,然后写入并发表评论。

但是这么做,基本是不可能抢到一楼的。

在看之前最好先了解下http协议基础内容,知道post和get就行了:这里有一篇文章很不错:HTTP 协议详解

简单测试就可以得出我们就可以知道b站发表评论的方式是向服务器post数据,使用http fox监视数据后,post的数据是这样的:

其中的message就是我们要发的内容,oid则是目标番剧的代码,b站的每个番剧都会有一个类似的编号。

那么我们要做的就是获得目标剧的编号,然后在第一时间post数据,这样我们省去了加载网页的过程直接完成抢楼。

因为发表弹幕需要登录,所以这里还使用了selenium模拟登录并获得网页cookies,关于cookies,有兴趣也可以了解下:cookie协议详解

具体代码如下:

from selenium import webdriver
import requests
from re import findall
from bs4 import BeautifulSoup
import time def get_cookies():
driver = webdriver.Opera()
url = 'https://passport.bilibili.com/login'
driver.get(url)
driver.find_element_by_xpath('//*[@id="userIdTxt"]').send_keys(input('请输入用户名'))
driver.find_element_by_xpath('//*[@id="passwdTxt"]').send_keys(input('请输入密码'))
driver.find_element_by_xpath('//*[@id="vdCodeTxt"]').click()
driver.find_element_by_xpath('//*[@id="vdCodeTxt"]').send_keys(input('请输入验证码(不分大小写)'))
driver.find_element_by_css_selector(
'body > div.head_foot_content > div > div.content-bd > div.content-r > form > input.login').click()
if driver.current_url != url:
print('登录成功')
qianglou(driver.get_cookies())
else:
print('登陆失败,请重试')
get_cookies() def qianglou(cookie):
cookies = {
'DedeUserID': cookie[].get('value'),
'DedeUserID__ckMd5': cookie[].get('value'),
'SESSDATA': cookie[].get('value'),
# 'DedeUserID': ,
# 'DedeUserID__ckMd5': 'fff63aa9b5e53ec3',
# 'SESSDATA': '92847f1e%2C1476104322%2Cb700756a',
}
anime_num = input('请输入要抢楼的番剧编号\n->')
message = input('请输入要发送的信息\n->')
url = 'http://bangumi.bilibili.com/anime/v/' + str(anime_num)
i =
get_av_num(url, message, cookies, i) def get_av_num(url, message, cookies, i):
print('try', i)
content = BeautifulSoup(requests.get(url).content.decode('utf8', 'ignore'), 'lxml')
av_infos = content.find('a', class_='v-av-link')
if av_infos is None:
i +=
get_av_num(url, message, cookies, i)
av_infos = av_infos.text + '/'
av_num = findall('AV(.*?)/', av_infos)[]
av_num = int(av_num)
data = {
'message': message,
'type': ,
'oid': av_num
}
send_message(cookies, data) def send_message(cookies, data):
url = 'http://api.bilibili.com/x/v2/reply/add'
content = requests.post(url, data=data, cookies=cookies).content.decode('utf8', 'ignore')
result = findall('"message":"(.*?)"', content)
if result[] == 'ok':
print('发送完成')
else:
send_message(cookies, data) if __name__ == '__main__':
get_cookies()
# qianglou()

我只实现了最基础的发表弹幕功能,缺点是你必须提供要抢楼的番剧号,有兴趣的可以继续完成,我提供下思路:通过BeautifulSoup,检测番剧主页面,是否更新,然后在更新时提取出番剧编号,自动发弹幕。

祝抢楼愉快~~~

BliBli抢楼全攻略的更多相关文章

  1. 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法

    若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...

  2. 生成 PDF 全攻略【2】在已有PDF上添加内容

    项目在变,需求在变,不变的永远是敲击键盘的程序员..... PDF 生成后,有时候需要在PDF上面添加一些其他的内容,比如文字,图片.... 经历几次失败的尝试,终于获取到了正确的代码书写方式. 在此 ...

  3. 从小工到专家 ——读《Java程序员职场全攻略》有感

    从小工到专家 ——读<Java程序员职场全攻略>有感   <Java程序员职场全攻略>是以故事的形式,向读者介绍Java程序员的职场经验.作者牛开复在北京从事软件开发,已经是一 ...

  4. Android屏幕适配全攻略 (转载)

    http://blog.csdn.net/jdsjlzx/article/details/45891551 https://github.com/hongyangAndroid/AndroidAuto ...

  5. Moon.Orm3.8技术全攻略

    Moon.ORM技术全攻略  一.绪论 本文主要是针对Moon.ORM的技术的讨论及其使用使用指导.如有其它疑问,请留言.本文主要针对Moon.ORM3.9版本,同时将会对4.0做一个技术预览.本文从 ...

  6. TestLink安装全攻略

    TestLink安装全攻略 此文章转自该链接--http://www.cnblogs.com/Tcorner/archive/2011/07/26/2117296.html 安装前准备 需要下载xam ...

  7. 取代奶瓶Minidwep-gtk破解WPA 全攻略

    取代奶瓶Minidwep-gtk 破 WPA 全攻略  目录 1. CDlinux 下使用 minidwepgtk 获取握手包并使用自带的字典破解 2. 自带的字典破解不出密码时使用 U 盘外挂字典继 ...

  8. 用C#制作PDF文件全攻略

    用C#制作PDF文件全攻略 目  录 前    言... 3 第一部分 iText的简单应用... 4 第一章 创建一个Document 4 第一步 创建一个Document实例:... 5 第二步 ...

  9. 【转】轻松搞定FTP之FlashFxp全攻略

    转载网址:http://www.newhua.com/2008/0603/39163.shtml 轻松搞定FTP之FlashFxp全攻略 导读: FlashFXP是一款功能强大的FXP/FTP软件,融 ...

随机推荐

  1. 高通APQ8074 spi 接口配置

    高通APQ8074 spi 接口配置 8074 平台含有两个BLSP(BAM Low-Speed Peripheral) , 每一个BLSP含有两个QUP, 每一个QUP可以被配置为I2C, SPI, ...

  2. C#实现随机抽奖和冒泡排序

    随机抽奖程序 string[] s = new string[] { "A", "B", "C", "D", " ...

  3. iOS深入学习:(UITableView系列3:insertRow)

    前面一篇博客,我使用了reloadData来刷新界面,但是这样没有动画效果,那么我这里通过insertRowsAtIndexPaths:withRowAnimation设置动画效果,希望对大家有所帮助 ...

  4. UVA 11584 一 Partitioning by Palindromes

    Partitioning by Palindromes Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & %l ...

  5. 样式表中的 element.style样式如何修改

    我们在写前面 web样式的时候,会发现有些时候,我们怎么修改 style里面的值,页面上的样式都不会修改,当你用工具查看时,会发现里面会有 element.style的值,这个值还找不到是在哪里出现的 ...

  6. System.MissingMethodException: 找不到方法:

    This is a problem which can occur when there is an old version of a DLL still lingering somewhere ar ...

  7. MyBatis 内连接association 左外连接collection

    前提条件: 学生表 (多  子表) 年级表(一  主表) 1,第一种情况:先查子表所有 student.sql.xml文件如何配 由于有多表连接,无法把查询结果直接封装成一个实体对象--------& ...

  8. SQL语句like子句中的转义符

    如果想在SQL LIKE里查询有下划线'_'或是'%'等值的记录,直接写成like 'XXX_XX',则会把'_'当成是like的通配符.SQL里提供了 escape子句来处理这种情况,escape可 ...

  9. 从xubuntu-->windows xp

    捣鼓了两个月的ubuntu之后我又乖乖的回到了windows的怀抱,不是抛弃linux而是要适应身边的环境. 身边的板子的驱动基本上都是xp的老一点的还是vista的,让人情何以堪. 我努力克服了,用 ...

  10. [转]产品需求文档(PRD)的写作

    产品需求对产品研发而言非常重要,写不好需求,后面的一切工作流程与活动都会受到影响.转载一篇文章,关于产品需求文档写作方面的,如下: 本文摘自(一个挺棒的医学方面专家):http://www.cnblo ...