刷網頁瀏覽(二)


經過研究,發現網頁統計瀏覽量主要是根據ip地址和cookie中的緩存,並且網站都會做防刷,

它會判斷url的來源,如:

來源URL:Request.UrlReferrer
瀏覽器類型:Request.UserAgent 
遠程客戶端的DNS:Request.UserHostName

所以用httpclient去訪問頁面時,還要把userAgent修改一下,當然緊緊是修改userAgent是不行的,瀏覽器訪問網頁得到html,需要解析:

  1. 根據資源類型決定如何處理(假設資源為HTML文檔)
  2. 解析HTML文檔,構件DOM樹,下載資源,構造CSSOM樹,執行js腳本,這些操作沒有嚴格的先后順序,以下分別解釋
  3. 構建DOM樹:
    1. Tokenizing:根據HTML規范將字符流解析為標記
    2. Lexing:詞法分析將標記轉換為對象並定義屬性和規則
    3. DOM construction:根據HTML標記關系將對象組成DOM樹
  4. 解析過程中遇到圖片、樣式表、js文件,啟動下載
  5. 構建CSSOM樹:
    1. Tokenizing:字符流轉換為標記流
    2. Node:根據標記創建節點
    3. CSSOM:節點創建CSSOM樹
  6. 根據DOM樹和CSSOM樹構建渲染樹:
    1. 從DOM樹的根節點遍歷所有可見節點,不可見節點包括:1)script,meta這樣本身不可見的標簽。2)被css隱藏的節點,如display: none
    2. 對每一個可見節點,找到恰當的CSSOM規則並應用
    3. 發布可視節點的內容和計算樣式
  7. js解析如下:
    1. 瀏覽器創建Document對象並解析HTML,將解析到的元素和文本節點添加到文檔中,此時document.readystate為loading
    2. HTML解析器遇到沒有async和defer的script時,將他們添加到文檔中,然后執行行內或外部腳本。這些腳本會同步執行,並且在腳本下載和執行時解析器會暫停。這樣就可以用document.write()把文本插入到輸入流中。同步腳本經常簡單定義函數和注冊事件處理程序,他們可以遍歷和操作script和他們之前的文檔內容
    3. 當解析器遇到設置了async屬性的script時,開始下載腳本並繼續解析文檔。腳本會在它下載完成后盡快執行,但是解析器不會停下來等它下載。異步腳本禁止使用document.write(),它們可以訪問自己script和之前的文檔元素
    4. 當文檔完成解析,document.readState變成interactive
    5. 所有defer腳本會按照在文檔出現的順序執行,延遲腳本能訪問完整文檔樹,禁止使用document.write()
    6. 瀏覽器在Document對象上觸發DOMContentLoaded事件
    7. 此時文檔完全解析完成,瀏覽器可能還在等待如圖片等內容加載,等這些內容完成載入並且所有異步腳本完成載入和執行,document.readState變為complete,window觸發load事件
  8. 顯示頁面(HTML解析過程中會逐步顯示頁面)

所以簡單獲取到html,只能稱為簡單的爬蟲,例如博客園網站,計算瀏覽量方法不是一個url請求就能算瀏覽,還需要把html解析得到的url請求完。

解決這個問題,想到兩個方法:

(1)寫個批處理,先設置瀏覽器的代理服務器,再自動啟動瀏覽器,然后在關閉 瀏覽器。

(2)將通過httpclient 爬到的html,解析,將所有資源都訪問一遍。

先說第一種方法:

批處理如下,讓Runtime這個類去執行:

cd \
C:
cd Users\jsonzb\AppData\Local\Google\Chrome\Application
chrome "https://www.cnblogs.com/fangxiaoneng/p/8302407.html"

執行批處理文件:Runtime.getRuntime().exec("Chrome.bat")
關閉瀏覽器:Runtime.getRuntime().exec("taskkill /f /im chrome.exe")  瀏覽器對同域名連接有最大限制,而http1.1的connection都是keep—alive
代理設置用
com.alibaba.b2b.qa.browsers.compare.Browser這個類完成
經過測試可行,
測試過程:
1.我的chrome.bat
2.執行chrome
3.自動彈出瀏覽器訪問url

4.結果:我的瀏覽器ip是,183.208.20.54,而模擬服務器最后得到的是代理服務器的ip,說明這種方式可以






 
        

 

第二種方法:waiting..........

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM