chrome開發總結(交互/許可權/存儲)-爬蟲

来源:http://www.cnblogs.com/-10086/archive/2016/01/30/5171263.html
-Advertisement-
Play Games

chrome開發總結(交互/許可權/存儲) 爬蟲 [TOC] 標簽(空格分隔): 雜亂之地 經過一翻折騰。還是選擇了chrome來做爬蟲。主要是為瞭解決一些ajax載入的問題以及代理的問題。 1.chrome 配置文件 manifest.json 上面這些不是必須的。把自己需要的加上就可以了。基本上後


chrome開發總結(交互/許可權/存儲)-爬蟲

[TOC]

標簽(空格分隔): 雜亂之地


經過一翻折騰。還是選擇了chrome來做爬蟲。主要是為瞭解決一些ajax載入的問題以及代理的問題。

1.chrome-配置文件

manifest.json

{
  // 必選
  "manifest_version": 2,
  "name": "我的應用",
  "version": "版本字元串",

  // 推薦
  "default_locale": "en",
  "description": "純文本描述",
  "icons": {...},

  // 選擇某一個(或者無)
  "browser_action": {...},
  "page_action": {...},

  // 可選
  "author": ...,
  "automation": ...,
  "background": {
    // 推薦
    "persistent": false
  },
  "background_page": ...,
  
  "commands": ...,
  
  "content_scripts": [{...}],
  "content_security_policy": "策略字元串",
  "converted_from_user_script": ...,
  "current_locale": ...,
  
  "externally_connectable": {
    "matches": ["*://*.example.com/*"]
  },
  
  "homepage_url": "http://path/to/homepage",
  "import": ...,
  "incognito": "spanning 或 split",
  
  "key": "公鑰",
  "minimum_chrome_version": "版本字元串",
  
  "offline_enabled": true,
  
  "optional_permissions": ...,
  "options_page": "aFile.html",
  "page_actions": ...,
  "permissions": [...],
  
  "plugins": [...],
  "requirements": {...},
  
  "script_badge": ...,
  "short_name": "短名稱",
  "signature": ...,
  "spellcheck": ...,
  "storage": {
    "managed_schema": "schema.json"
  },
  
  "tts_engine": ...,
  "update_url": "http://path/to/updateInfo.xml",
  "web_accessible_resources": [...]
}

上面這些不是必須的。把自己需要的加上就可以了。基本上後面的都是不需要的。下麵貼一個我的項目的配置

{
  "name": "siteSpider",
  "manifest_version": 2,
  "version": "0.0.2",
  "description": "相對單線程穩定版",
  "browser_action": {
    "default_icon": "spider.png",
    "default_title": "spider",
    "default_popup": "popup.html"
  },
  "permissions": [
    "activeTab",
    "webRequest",
    "webNavigation",
    "webRequestBlocking",
    "proxy",
    "*://*/*",
    "tabs",
    "storage",
    "unlimitedStorage"
  ],
  "background": { "scripts": ["js/jquery-1.11.2.min.js", "js/bk.js"] },
  "content_scripts": [
    {
      "matches": [
        "*://*/*"
      ],
      "js": [
        "js/jquery-1.11.2.min.js",
        "js/content.js"
      ]
    }
  ]
}

2. chrome-js簡介

chrome一般情況下是3個js。這3個js分別是popup.js/background.js/content.js
這三個js的名字分別代表他們的位置及作用的地點。

  • popup.js是彈出的那個頁面用的js。假如在彈出的頁面引用了document.getElement.ById().則 他獲取的是popup.html頁面的內容。而不是當前頁的。popup.js所作用的範圍就是popup.

  • background.js:顧名思義,他是一個後臺的js,在任何頁面都可以調用。他主要的作用就是調度及與我們的後臺發送ajax請求等。通過bk.js給popup/content來發送信息。操作tab以及做一些監聽等操作。
  • content.js:是頁面中的js,也就是tab中的js。在background.js可以通過

    chrome.tabs.query(active:true,currentWindow:true,function(tabs){
    //發送一些操作指令
    })

    來發送一些指令進行操作。並且只能使用chrome.extension.*的api.

    3. chrome-交互

    chrome插件交互一般是3種js之間的交互。
    下麵演示一下popup.js跟background.js的交互。
    這是一個popup.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="js/jquery-1.11.2.min.js"></script>
    <script type="text/javascript" src="js/popup.js"></script>
    </head>
    <body>
    <div>
    <!-- <div>
            sku編碼:<input type="text" id="sku"/>
        </div> -->
    <div>
        抓取規則:<select id="rule">
       <option value="tb">淘寶</option>
    </select>
    </div>
    <div>
        抓取頁數:<input type="text" id="fetchNum" value="1"/>
    </div>
    <button id="startFetch">抓取</button>
    <button id="hasLoginOk">已登錄</button>
    </div>
    <div>
    使用說明:
    1.在淘寶搜索好關鍵詞(可選擇排序或其他淘寶功能)後,點擊抓取。
    2.如果出現登錄驗證,請登錄後點擊已登錄,然後刷新當前網頁。
    3.插件正常運行中, 禁止使用該瀏覽器瀏覽其他網頁。
    </div>
    <!-- <div id="html">
        抓取總數:<span id="fetchTotals"></span>
    </div>
    -->
    </body> 
    </html>

    下麵是popup.js
    ```
    $(function() {//綁定按鈕
    $("#startFetch").bind("click", startFetch);
    $("#hasLoginOk").bind("click",hasLoginOk);
    })
    function hasLoginOk() {
    chrome.runtime.sendMessage({
    type: "mustLoginIsOk"
    },
    function(response) {
    });
    }
    function startFetch() {
    var rule = $("#rule").val();
    var num = $("#fetchNum").val();
    var sku = $("#sku").val();
    var baseUrl = $("#baseUrl").val();
    chrome.runtime.sendMessage({//發送消息
    type: "fetchUrls",
    sku: sku,
    rule: rule,
    num: num,
    baseUrl: baseUrl
    },
    function(response) {
    $("#fetchTotal").html(response);
    });
    }

/* chrome.extension.onMessage.addListener(function(request,_,response){
if(request.totals){
$("#fetchTotal").html("z");
$("#fetchTotal").html(request.totals);
}
}) */

可以看到popup.js通過chrome.runtime.sendMessage()來發送消息。 在backgroundjs通過chrome.extension.onMessage.addListener()```來放置一個監聽器。監聽所有的請求。

總結 chrome-js之間的通信都是通過chrome-api的chrome.tabs.sendMessage,chrome.runtime.sendMessage,chrome.extension.onMessage.addListener()來進行的。
api地址:http://chajian.baidu.com/developer/extensions/api_index.html
下麵是代碼地址
https://github.com/wongloong/chromeSpider


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 線程問題我會分成三篇文章來給大家做個詳細的講解 一、線程的概念 1.線程是進程的組成部分,一個進程可以擁有多個線程,一個線程必須有一個父線程; 2.線程擁有自己的堆棧、自己的程式計數器和自己的局部變數,但不再擁有系統資源,它與父線程中的其他線程共用該進程所擁有的全部資源 3.線程是獨立運行的,它並不
  • 會話技術: 會話:瀏覽器訪問伺服器端,發送多次請求,接受多次響應。直到有一方斷開連接。會話結束。 解決問題:可以使用會話技術,在一次會話的多次請求之間共用數據。 分類: 客戶端會話技術 Cookie 伺服器端會話技術 Session 客戶端會話技術:Cookie 小餅干的意思 伺服器端不需要管理,方
  • 一個成熟的大型網站(如淘寶、京東等)的系統架構並不是開始設計就具備完整的高性能、高可用、安全等特性,它總是隨著用戶量的增加,業務功能的擴展逐漸演變完善的,在這個過程中,開發模式、技術架構、設計思想也發生了很大的變化,就連技術人員也從幾個人發展到一個部門甚至一條產品線。 (歡迎大家訪問我的個人網站:工
  • 話題從重用開始說起: 最基本的重用,重用一個方法,被重用的邏輯被抽取封裝成為方法,之後我們把方法當成一種工具來使用(處理數據,輸入輸出,或者改變狀態)。 來到了面向對象的時代,如果這個方法出現父類上面就是繼承,如果這個方法出現在其他對象上就是代理,如果子類想要重用父類的介面又不想重用實現那麼就是多態
  • 頭文件: <cfloat> (float.h) 浮點類型的特性 這個頭文件為特殊系統和編譯器的實現描述了浮點類型的特征. 一個浮點數包含四個元素: 一個標誌(a sign):正或負; 一個基數(a base):這表示一串不同的數字能夠被一個個單一的數字所表示(2 就是二進位(binary),10就是
  • 程式產生一個1-100的隨機數,用戶嘗試儘可能少的次數猜出這個數。 #include<stdio.h> #include<stdlib.h> #include<time.h> #define MAX_NUMBER 100 //external variable int secret_number;
  • 本文藉鑒於他人 學習java的第一步就要搭建java的學習環境,首先是要安裝JDK,JDK安裝好之後,還需要在電腦上配置"JAVA_HOME"、"path"、"classpath" 這三個環境變數才能夠把java的開發環境搭建好。在沒安裝過jdk的環境下,path環境變數是系統變數,本來存在的,而J
  • 1. 文本264stream_720_2zhen.txt中存儲的數據如圖1所示 圖 1 要導入的數據截圖 2. MATLAB中讀入數據的命令,由於數據之間間隔2個空格,所以fscanf格式中[‘%x’ ]中括弧中加入了兩個空格 %read data from txt fid= fopen('264s
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...