新聞中心
故事背景
事情是這樣的呢

創(chuàng)新互聯(lián)網(wǎng)站建設提供從項目策劃、軟件開發(fā),軟件安全維護、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評估等整套的建站服務,主營業(yè)務為成都網(wǎng)站制作、成都網(wǎng)站建設、外貿營銷網(wǎng)站建設,成都app軟件開發(fā)公司以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。創(chuàng)新互聯(lián)深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
友人 A: 能不能幫我整一個 chrome 插件?
我: 啥插件?
友人 A: 通過后端服務或者 python 腳本通信 chrome 插件能夠操作瀏覽器
我: 你小子是想爬數(shù)據(jù)吧?直接用現(xiàn)成的 python 框架或者 谷歌的 puppeteer 就能操控瀏覽器吧
友人 A: 你說的路子我早就試過了,對于反爬檢測高的網(wǎng)站一下就能檢測你的無頭瀏覽器的相應特征,所以就用平時用的瀏覽器就能以真亂真
我: 老是整這些花里胡哨的,有啥用呀
友人 A: 10 斤小龍蝦!
我:成交!!!
整體的思路
根據(jù)朋友以上的要求,我們可以簡單的得出一下的通信流程:
具體有疑問沒關系,我們只要知道大體的流程是這樣通信的即可
github 地址 每個 commit 對應相應的步驟
第一步 創(chuàng)建一個 chrome 插件
我們首先來創(chuàng)建一個啥功能都沒有的 chrome 插件
目錄如下所示
manifest.json
- // manifest.json
- {
- "manifest_version": 2, // 配置文件的版本
- "name": "SocketEXController", // 插件的名稱
- "version": "1.0.0", // 插件的版本
- "description": "Chrome SocketEXController",// 插件描述
- "author": "wjryours", // 作者
- "icons": {
- "48": "icon.png",// 對應尺寸的圖標路徑 我這邊全部用一個了
- "128": "icon.png"
- },
- "browser_action": {
- "default_icon": "icon.png", // 圖標
- "default_popup": "popup.html" // 點擊右上角的圖標的 popup 浮層 html 文件
- },
- "background": {
- // 會一直常駐的后臺 JS 或后臺頁面
- // 2 種指定方式,如果指定 JS,那么會自動生成一個背景頁
- "page": "background.html"
- },
- "content_scripts": [
- {
- // 允許哪些域名下加載 注入的 JS
- // "matches": ["http://*/*", "https://*/*"],
- // "
" 表示匹配所有地址 - "matches": [
- "
" - ],
- "js": [
- "content-script.js"
- ],
- "run_at": "document_start"
- }
- ],
- "permissions": [
- "contextMenus", // 右鍵菜單
- "tabs", // 標簽
- "notifications", // 通知
- "webRequest", // web 請求
- "webRequestBlocking", // 阻塞式 web 請求
- "storage", // 插件本地存儲
- "http://*/*", // 可以通過 executeScript 或者 insertCSS 訪問的網(wǎng)站
- "https://*/*" // 可以通過 executeScript 或者 insertCSS 訪問的網(wǎng)站
- ],
- }
js
- // background.js
- console.log('background.js')
- // popup.js
- console.log('popup.js')
- // content-script.js
- console.log('content-script.js loaded')
html
SocketController Popup - popup
SocketController - bg-container
然后在 chrome 的擴展程序頁加載我們的文件目錄 即可
然后我們啟用插件 隨手打開一個頁面就發(fā)現(xiàn)我們的插件已經(jīng)生效了
第二步 在本地創(chuàng)建 websocket 的服務
正如上面的通信流程所示,我們還需要在本地創(chuàng)建一個可用的 websocket 來發(fā)送信息給 chrome 插件
為了方便起見,我這邊就用 node 的 express 以及 socket.io 這個庫來啟用
目錄結構和代碼都很簡單
- // index.js 用來創(chuàng)建 node 服務
- const express = require('express')
- const app = express()
- const http = require('http')
- const server = http.createServer(app)
- const { Server } = require("socket.io")
- const io = new Server(server)
- app.get('/', (req, res) => {
- res.sendFile(__dirname + '/index.html')
- })
- io.on('connection', (socket) => {
- console.log('a user connected')
- socket.on('disconnect', () => {
- console.log('user disconnected');
- });
- socket.on('webviewEvent', (msg) => {
- console.log('webviewEvent: ' + msg);
- io.emit('webviewEvent', msg);
- // socket.broadcast.emit('chat message', msg);
- });
- socket.on('webviewEventCallback', (msg) => {
- console.log('webviewEventCallback: ' + msg);
- io.emit('webviewEventCallback', msg);
- });
- })
- server.listen(9527, () => {
- console.log('listening on 9527')
- })
Socket.IO Page


咨詢
建站咨詢