<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          小技巧 | Get 到一個 Web 自動化方案,絕了!

          共 5136字,需瀏覽 11分鐘

           ·

          2021-09-12 07:27





          關(guān)注公眾號簡說Python
          回復(fù)關(guān)鍵字「 crx 」獲取本文完整源碼

          1. 前言

          無論是 Chrome,還是 Firefox 瀏覽器,它們的強大性在很大程度上都是依賴于海量的插件,讓我們能高效辦公

          那我們是否可以編寫一個插件,讓瀏覽器自動化完成一些日常工作,解放雙手呢?

          答案是肯定的

          本篇文章以 Chrome 插件為例,結(jié)合一個實例,聊聊 Web 端自動化的另一種方案

          2. Chrome 插件

          Chrome 擴展插件運行于基于 Chromium 內(nèi)核的瀏覽器

          包含:Chrome 瀏覽器、Microsoft Edge、360 瀏覽器等

          一個 Chrome 擴展插件有 3 類文件組成,包含:

          • 配置文件 manifest.json

          • js 腳本文件

          • 圖片、css 等資源文件

          配置文件「 manifest.json 」用于配置擴展的名稱、版本號、作者、圖標 icon、彈出界面、權(quán)限、腳本路徑等信息

          js 腳本文件包含 popup.js、background  和 content_scripts

          其中

          • popup.js 用于搭配 popup.html 使用,用于點擊插件圖標的時候展示頁面及頁面邏輯控制

          • background 用于定義一個后臺頁面,相當(dāng)于一個常駐頁面,生命周期和瀏覽器一致

          • content_scripts 用于注入 JS 腳本,它不會和頁面中的腳本產(chǎn)生沖突

          3. 實戰(zhàn)一下

          假設(shè)我們現(xiàn)在需要完成一個插件,在首次登錄或登錄失效時,自動完成登錄操作

          3-1  創(chuàng)建項目

          我們創(chuàng)建一個文件夾,項目結(jié)構(gòu)目錄如下

          3-2  項目配置

          我們在 manifest.json 配置文件中,首先設(shè)置插件的基本信息

          # mainifest.json

          {
              "manifest_version"2//配置文件版本
              "name""auto_login"//插件名稱
              "version""0.0.1"//插件版本

              //下面都是選填
              "description""自動登錄"//描述信息
              "author""xag"//作者
              // 插件icon
              "icons": {
                  "84""./image/icon.png"
              }
          ...

          然后,設(shè)置瀏覽器插件的圖標及后臺頁面

          需要注意的是,后臺頁面 background 可以設(shè)置一個 HTML 頁面,也可以設(shè)置 JS 腳本列表,且只能選擇其中一種

          # mainifest.json

          // 瀏覽器右上角的圖標和內(nèi)容
          "browser_action": {
              "default_icon""./image/icon.png",
              "default_title""自動登錄",
              "default_popup""./html/popup.html" //點擊插件圖標,彈出來的界面
          },
          //后臺頁面,JS/HTML只能選擇一種
          "background": {
              "scripts": ["./js/background.js"],
              "persistent"true
          },
          ...

          接著,使用關(guān)鍵字「 content_scripts 」配置匹配規(guī)則及注入 JS 腳本

          # mainifest.json

          //content-scripts腳本設(shè)置
          "content_scripts": [
              {
                  // "<all_urls>" 表示匹配所有地址
                  "matches": ["<all_urls>"],
                  // 執(zhí)行JS
                  "js": ["./js/content.js"],
                  "run_at""document_end" //配置運行時間點
              },
              {
                  "matches": ["https://****/"],
                  "js": ["./js/content_vx.js"],
                  "run_at""document_end"
              }
          ],

          ...

          這里設(shè)置所有的頁面都會執(zhí)行 content.js 腳本,當(dāng)匹配到第二個頁面時,執(zhí)行 content_vx.js 腳本

          需要指出的是,run_at 設(shè)置為 document_end,代表當(dāng)頁面加載完成后,才會執(zhí)行目標腳本

          最后,根據(jù)業(yè)務(wù)需要,使用關(guān)鍵字「 permissions 」定義權(quán)限

          PS:本例不涉及權(quán)限,可以省略設(shè)置

          # manifest.json

          ...
          //權(quán)限配置
              "permissions": [
                  "contextMenus"// 右鍵菜單
                  "storage"// 本地存儲
                  "webRequest"// 網(wǎng)絡(luò)請求
                  "webRequestBlocking"// 阻塞式的網(wǎng)絡(luò)請求
                  "<all_urls>"// 匹配的URL
                  "tabs"// 標簽
                  "notifications" // 通知
              ]
          }

          3-3  編寫注入腳本

          在 content_vx.js 文件中,根據(jù)需求操作 DOM 元素,完成自動化的操作

          比如,這里獲取用戶名、密碼輸入框,模擬輸入,然后模擬點擊登錄按鈕,完成登錄的操作

          需要注意的是,如果 run_at 設(shè)置為 document_start,這里需要做延遲加載

          # content_vx.js

          //輸入
          function input(inputElement, content{
              let evt = document.createEvent('HTMLEvents');
              evt.initEvent('input'truetrue);
              inputElement.value = content;
              inputElement.dispatchEvent(evt)
          }

          //模擬輸入和提交表單
          //用戶名
          const username_element = document.getElementById("ContentHtml_txtUserName");
          //密碼
          const password_element = document.getElementById("txtPassword");

          //按鈕
          const btn_element = document.getElementById("ContentHtml_btnLogin");

          //輸入后,點擊確認
          input(username_element, "**");
          input(password_element, "**");

          //登錄
          btn_element.click();

          3-4  測試使用

          在定義好插件 icon 圖標及 popup 頁面后,我們可以進入到 Chrome 插件管理界面

          開啟「 開發(fā)者模式 」,然后點擊左側(cè)的「 加載已解壓的擴展程序 」加載上面創(chuàng)建的項目文件夾

          開啟擴展插件,每次打開目標網(wǎng)站或退出登錄時,會發(fā)現(xiàn)網(wǎng)頁會自動完成登錄操作

          4. 最后

          本例僅利用 content_scripts 注入一段腳本,通過操作 DOM 元素,將一個繁瑣的登錄操作做成自動化

          實際上,復(fù)雜的 Chrome 插件會涉及到 background 配置、浮框布局 JS 腳本、inject-scripts 引入腳本及他們之間的數(shù)據(jù)傳輸,這部分內(nèi)容大家可以自行擴展

          我已經(jīng)將文中所有源碼上傳到后臺,關(guān)注公眾號簡說Python后回復(fù)關(guān)鍵字「 crx 」獲取完整源碼

          如果你覺得文章還不錯,請大家 點贊、分享、留言 下,因為這將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強動力!

          --END--



          掃碼即可加我微信

          老表朋友圈經(jīng)常有贈書/紅包福利活動

          新玩法,以后每篇技術(shù)文章,點贊超過100+,我將在個人視頻號直播帶大家一起進行項目實戰(zhàn)復(fù)現(xiàn),快嘎嘎點贊吧?。?!

          直播將在我的視頻號:老表Max 中開展,掃上方二維碼添加我微信即可查看我的視頻號。


          大家的 點贊、留言、轉(zhuǎn)發(fā)是博主的最大支持。



          學(xué)習(xí)更多:
          整理了我開始分享學(xué)習(xí)筆記到現(xiàn)在超過250篇優(yōu)質(zhì)文章,涵蓋數(shù)據(jù)分析、爬蟲、機器學(xué)習(xí)等方面,別再說不知道該從哪開始,實戰(zhàn)哪里找了

          點贊”就是對博主最大的支持 

          瀏覽 45
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月综合视频 | 欧美亚洲天堂 | 卡一卡二无码 | 国产女人操逼 | 国产久久这里只有精品视频 |