场景:

获取DY直播间弹幕,并分类保存

安装第三方包:

经过调研,此处主要使用的是webdriver相关的包,也就是selenium,以及protobuf解析相关的包,如下:

//安装google的protobuf

pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com protobuf

//安装webdriver相关的selenium

pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com selenium

在本地下载和自己chrome浏览器版本号对应的chromedriver的可执行文件(.exe),各个版本的webdriver下载链接如下:http://chromedriver.storage.googleapis.com/index.html

代码实现:

下面是主类的实现过程,注意下面的chromdriver的可执行文件存放的路径要修改成本地下载的chromedriver文件在自己本地电脑上存放的对应位置,如下图:

#!/user/bin/env pythonfrom selenium import webdriver
import time
import json
from queue import Queue
import base64
import datetime
from selenium.webdriver.chrome.options import Options
from proto import message_pb2class GiftTks():'''thanks to the gift sender'''def __init__(self):super(GiftTks, self).__init__()@classmethoddef run(cls, url, gift_queue):chromeOpitons = Options()# 使用无头谷歌浏览器模式chromeOpitons.add_argument('--headless')chromeOpitons.add_argument('--disable-gpu')chromeOpitons.add_argument('--no-sandbox')chromeOpitons.add_argument("--start-maximized")# 无痕隐身模式chromeOpitons.add_argument('--incognito')# 禁用缓存chromeOpitons.add_argument("disable-cache")# 忽略证书错误chromeOpitons.add_argument('--ignore-certificate-errors')# chromeOpitons.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})# chromeOpitons.add_experimental_option('excludeSwitches', ['enable-automation'])chromeOpitons.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])chromeOpitons.add_experimental_option('w3c', False)# chromeOpitons.add_argument(#     'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36')caps = {'browserName': 'chrome','loggingPrefs': {'browser': 'ALL','driver': 'ALL','performance': 'ALL',},'goog:chromeOptions': {'perfLoggingPrefs': {'enableNetwork': True,},'w3c': False,},}driver = webdriver.Chrome(executable_path="D:\\tools\\python3.8\\chromedriver.exe",desired_capabilities=caps,options=chromeOpitons)# driver.set_page_load_timeout(30)driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})driver.get(url)while True:for i in driver.get_log('performance'):log = json.loads(i['message'])['message']if log['method'] == 'Network.responseReceived' and "params" in log.keys():_url = log['params']['response']['url']_requestId = log['params']['requestId']if str(_url).startswith(r'https://live.douyin.com/webcast/im/fetch/?aid='):content = {}try:# print(_url)# print(_requestId)content = driver.execute_cdp_cmd('Network.getResponseBody',{'requestId': _requestId})except Exception:print(_requestId)if 'base64Encoded' in content and content['base64Encoded'] is True:_body = content['body']_bs = base64.b64decode(_body)response = message_pb2.Response()response.ParseFromString(_bs)for msg in response.messages:if msg.method == 'WebcastGiftMessage':_gift_msg_response = message_pb2.GiftMessage()_gift_msg_response.ParseFromString(msg.payload)print('{}  {}'.format(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),_gift_msg_response.common.describe))gift_queue.put('{}  {}'.format(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),_gift_msg_response.common.describe))time.sleep(1)if __name__ == '__main__'://直播间链接url = "https:xxxxx"gift_queue=Queue()GiftTks.run(url, gift_queue)

总结:

从对google的headless模式的一知半解到开始使用google的headless模式进行技术调研并解决问题,也对浏览器技术的快速发展有了一个全新的认识,所谓的无头模式其实就是模拟浏览器的行为只是不需要再打开一个网页,然后根据这个页面的网络请求响应数据,进行拦截获取对应的数据

Chrome无头模式获取直播间弹幕相关推荐

  1. 2021-04-21爬虫爬取b站直播间弹幕并制作词云

    直播间弹幕接口 'https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory?roomid=' + roomid 示例: json格式化 ...

  2. python 爬取直播弹幕视频_调用斗鱼API爬取直播间弹幕信息(用户昵称及弹幕内容)...

    调用斗鱼API爬取直播间弹幕信息(用户昵称及弹幕内容) 查看<斗鱼弹幕服务器第三方接入协议v1.4.1>,了解斗鱼API的使用方法,即如何连接斗鱼弹幕服务器.维持连接及获取弹幕信息 Pyt ...

  3. Flink实时计算斗鱼某直播间弹幕发言数TopN

    先获取斗鱼直播间弹幕,由kafka发送至flink消费,每隔10min输出最近1H内发言数量前10的用户名. 主要pom依赖 <dependency><groupId>org. ...

  4. B_zhan直播间弹幕抓取

    前两天研究了一下B_zhan的直播间,其实B_zhan的用户体量很少.我最近几个月一直在搞B站,几乎B_zhan能pa的都被我试过.其中还包括包括私信,大批量的私信.不过再三声明哈,我本人是为了学习, ...

  5. 自定义事件详解以及实现有趣B站直播间弹幕轰炸功能

    案例:B站直播间弹幕轰炸跳过按键监听办法: var event = document.createEvent('Event'); event.initEvent('input', true, true ...

  6. Flutter直播间弹幕效果实现

    主要实现直播间弹幕的布局,弹幕滚动,弹幕淡出效果,去除ListView的水波纹 1.danmu.dart布局的实现 (1)使用Text.rich组件完成弹幕文字部分的布局,TextSpan的child ...

  7. 抖音直播间弹幕protocbuf分析

    免责任声明: 任何可操作性的内容与本文无关,文章内容仅供参考学习,如有侵权, 损害贵公司利益, 请联系作者,会立刻马上进行删除 分析下: 1.protocolbuffer(以下简称PB)是google ...

  8. 抖音直播间弹幕rpc学习

    目标url 随便找个直播间即可. https://live.douyin.com/198986091107 接口分析 首先并没有在xhr下找到对应的接口 因为采用了websocket来传输信息.切换到 ...

  9. 几行JS代码实现b站直播间弹幕抽奖

    有浏览器就行,无需爬虫,无需安装其他任何软件或者插件. 在任意b站直播间,打开浏览器开发者工具(推荐使用chrome,对应开发者工具为DevTools),切换到控制台(console)面板即可. 作为 ...

最新文章

  1. 《MVC 系列》- 控制器数据传递
  2. 【spark】spark学习-27-Spark性能调优(2)
  3. linux 64 mysql下载官网_Linux下安装MySQL5.7
  4. ORA-06502: PL/SQL: numeric or value error: character to number conversion error 错误的解决方法...
  5. 易语言编程入门教程学习
  6. python快速搭建服务器方法
  7. 更换光猫后网速变慢的解决办法
  8. ltm4650_LTM4650IY-1APBF_代理全新进口【linear】现货商
  9. 青春饭碗——程序员,年纪大了怎么办?
  10. 农村信用社答题小程序
  11. life: zz 关于爱情
  12. HDU6194 后缀数组的应用
  13. MSXML2.DOMDocument
  14. 2009年2月28号发现,上海移动升级GPRS时出问题,导致一些用户话费被扣钱,甚至停机...
  15. 解决360断网急诊强力修复后无法上网的问题
  16. codeforces 19E Fairy 树链剖分
  17. rebol sdk 2.7.7 license
  18. Leetcode 594. 最长和谐子序列 C++
  19. 全球首款搭载高通820的Pico VR一体机谍照遭曝光
  20. 《读懂圣经并不难-李健》

热门文章

  1. 手把手带你安装PyTorch指定版本嘿!
  2. 基于TCP/IP协议 区别 GET和POST
  3. 拿破仑最欣赏的数学家,师从拉格朗日,撕逼泊松,一生痴迷热学最后却死于热学...
  4. short 在JAVA_short在java中是什么类型的
  5. 小白入门IT行业,该从哪儿下手?
  6. 3.Spark的安装(华为云学习笔记,Spark编程基础,大数据)
  7. 正则表达式?:代表什么意思
  8. OSX下代码打开系统首选项(system preferences)
  9. numpy中mgrid()和meshgrid()函数
  10. 联想笔记本电脑开机后一直黑屏的解决办法