chrome 插件–B站自动发弹幕

感觉网上关于插件开发的文章不多,其实插件开发很简单,也很方便。比起 selenium 解析网页,用 javascript 代码直接嵌入浏览器要方便很多。本文介绍了一个简单的自动发弹幕的例子,其实用插件做爬虫也是可行的。插件本地存储可以用 localStorage 先把爬取的资源链接存好,然后做个页面用表格展示,表格另存到本地,再用 python 程序直接访问链接。

自动发弹幕这个例子只需要三个文件,manifest.json ,background.js ,Bw.png (插件图标)。

manifest.json 文件代码:

  1. {
  2. “manifest_version”: 2,
  3. “name”: “弹幕助手”,
  4. “description”: “自动填充弹幕”,
  5. “version”: “1.0”,
  6. “permissions”: [
  7. “tabs”, “http://*/plus/flink_add.php”, “https://*/plus/flink_add.php”
  8. ],
  9. “background”: {
  10. “scripts”: [“background.js”]
  11. },
  12. “browser_action”: {
  13. “default_title”: “自动填充弹幕”,
  14. “default_icon”: “Bw.png”
  15. }
  16. }

 

background.js 文件代码:

  1. // Copyright (c) 2011 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. // Called when the user clicks on the browser action.
  5. var sleep = function(time) {
  6. var startTime = new Date().getTime() + parseInt(time, 10);
  7. while(new Date().getTime() < startTime) {}
  8. };
  9. function checkURL(url){
  10. console.log(‘URL:’+url);
  11. var flag = false;
  12. if(typeof url == “undefined” || null == url)
  13. url = window.location.href;
  14. // var regex = /.*\:\/\/.*\/form.php/;
  15. var regex = /https\:\/\/.*bilibili\.com.*/;
  16. var match = url.match(regex);
  17. if(typeof match != “undefined” && null != match)
  18. flag = true;
  19. return flag;
  20. }
  21. function autoAddValue()
  22. {
  23. chrome.tabs.executeScript(null,
  24. // 直接修改 input 的 value 值可能会引发问题。因为浏览器会认为程序自动输入的值是输入框的默认值,认为用户并没有输入文字!
  25. {code:” var input = document.querySelectorAll(‘input.bilibili-player-video-danmaku-input’)[0]; \
  26. var playbutton = document.querySelectorAll(‘div.bilibili-player-video-state’)[0];\
  27. var ClickDiv = document.querySelectorAll(‘div.bilibili-player-video-btn-send’)[0]; \
  28. \
  29. function fireClick(node){ \
  30. if (document.createEvent) {\
  31. var evt_m = document.createEvent(‘MouseEvents’);\
  32. evt_m.initMouseEvent(‘click’, true, false);\
  33. node.dispatchEvent(evt_m); \
  34. } else if(document.createEventObject) {\
  35. node.fireEvent(‘onclick’) ; \
  36. } else if (typeof node.onclick == ‘function’) {\
  37. node.onclick(); \
  38. }\
  39. }\
  40. function inputValue(dom, st) {\
  41. var evt = new InputEvent(‘input’, {\
  42. inputType: ‘insertText’,\
  43. data: st,\
  44. dataTransfer: null,\
  45. isComposing: false\
  46. });\
  47. dom.value = st;\
  48. dom.dispatchEvent(evt);\
  49. }\
  50. \
  51. fireClick(playbutton);\
  52. inputValue(input, ‘这个视频我看了好多遍了,讲得好。’);\
  53. function bullet(){\
  54. setInterval(function(){ \
  55. fireClick(ClickDiv); \
  56. console.log(\”点击一下\”);\
  57. }, 9000);\
  58. }\
  59. setTimeout(\”bullet()\”, 5000 );\
  60. });
  61. }
  62. var countUpdate = 1;
  63. chrome.browserAction.onClicked.addListener(function(tabId,changeInfo,tab){
  64. countUpdate = 1;
  65. });
  66. chrome.tabs.onCreated.addListener(function(tabId,changeInfo,tab){
  67. if(checkURL(tab.url)){
  68. countUpdate = 1;
  69. }
  70. })
  71. chrome.tabs.onUpdated.addListener( function(tabId,changeInfo,tab){
  72. if(countUpdate==2){
  73. sleep(5000);
  74. if(checkURL(tab.url))
  75. {
  76. autoAddValue();
  77. chrome.tabs.executeScript({
  78. code: ‘document.body.style.backgroundColor=”#f2d649″;console.log(‘+countUpdate.toString()+‘);’ // 黄色
  79. });
  80. }
  81. else
  82. {
  83. console.log(‘不是bilibili网站!’); // 这个无法显示在页面上,因为不是同一个页面。
  84. chrome.tabs.executeScript({
  85. code: ‘document.body.style.backgroundColor=”#f24182″‘ // 红色
  86. });
  87. }
  88. }
  89. countUpdate = countUpdate + 1;
  90. });
  91. // https://www.bilibili.com/video/BV1Ht411y73G?p=4

 

background.js 就是从浏览器启动一直在后台运行的东西。这个文件的功能是,如果网页是B站播放页面就把背景改为黄色,否则红色。在弹幕输入框输入“这视频很好…..”这句话,然后每9s发送一次。注意,输入文本和点击都必须发送事件,input 直接修改 value 属性是没用的。

把三个文件放在一个文件夹下,打开浏览器扩展页的开发者模式,把文件夹拖入扩展页,安装完成。

如果想了解插件还有什么其他的能力,访问  Chrome插件(Extensions)开发攻略 。

温馨提示: 本文最后更新于2022-08-06 23:21:20,本站资源部分来自网络,由老师收集整理,如有侵犯你的权益请联系管理员E-mail:1679716715@qq.com 我们会第一时间进行审核删除。站内资源为网友个人学习或测试研究使用,未经原版权作者许可,禁止用于任何商业途径!请在下载24小时内删除!,请在下方 留言或联系 资灵
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容

投稿


点击在线投稿
投稿邮箱:1679716715@qq.com
交流 QQ:1679716715