2017-01-22 35 views
1

我正在嘗試從服務器端進行單擊。在NodeJS中單擊事件

我使用nodeJS,我無法使用JQuery函數。

我會點擊.next類。

這是我會做什麼:

while (nbrPage > 0) 
{ 
    //my scraping code 
    nbrPage--; 
    $('.next').click(); 
} 

注意不是HTML代碼來湊是這樣的:

<span class="next"> 
    <a id="nextPage-159c6fa8635" class="page" href="/blablabla"></a> 
</span> 

有誰知道如何使用jQuery方法的NodeJS代碼或如何在NodeJS中做點擊功能?

編輯:我颳了一個網站,我想循環每個分頁,並從每個頁面廢棄我的數據。爲此,我需要進入下一頁並點擊下面的html代碼。換句話說,我會在我的節點js代碼中使用像$('.next').click()這樣的JQuery函數(使用requestcheerio)。

注意比我不想處理點擊事件,我正在尋找點擊。

感謝您的幫助

+0

能否請您解釋一下你正在試圖全面完成什麼? – theonlygusti

+0

我已編輯我的問題@theonlygusti – rastafalow

+0

爲什麼不jQuery的工作? – theonlygusti

回答

0

在Node.js中無法做到這一點。 Node.js是服務器端,而不是客戶端。 作爲解決方案,您可以在鏈接處解析href並提出取消下一頁的請求。這就是服務器端通常如何工作的方式。

0

Cheerio是一個非常有用的工具,它允許你在Node.JS中使用jQuery。你可以找到更多的信息比 - https://github.com/cheeriojs/cheerio

請求被設計爲使HTTP 電話可能是最簡單的方式。它支持HTTPS,並默認遵循重定向。

檢查他們的文檔 - https://github.com/request/request

對於服務器端,你需要創建一個函數來找到與「nextPage-」開始的ID在href。然後,如果發現您需要獲取屬性href的值。

從那裏你可以將這個值傳遞迴你的「請求」腳本,我假設你已經擁有了這個腳本並繼續你的廢棄,直到找不到「nextPage-」。

函數調用自身的重複序列稱爲「遞歸」。

現在什麼可能看起來像代碼 -

// Load Dependencies 
const CHEERIO = require("cheerio"); 
const REQUEST = require("request"); 


/** 
* Scraps HTML to find next page URL 
* 
* @function getNextPageUrl 
* 
* @param {string} HTML 
* 
* @returns {string || boolean} Returns URL or False 
*/ 
function getNextPageUrl(HTML) { 

    // Load in scrapped html 
    let $ = CHEERIO.load(HTML); 

    // Find ID that starts with `nextPage-` 
    let nextPage = $("span[id^='nextPage-']:first"); 

    // If it is 0, its false 
    if(nextPage.length) { 
     // Return href attribute value 
     return nextPage.attr("href"); 
    } else { 
     // Nothing found, return false 
     return false; 
    } 

} 


/** 
* Scraps the HTML from pages 
* 
* @function scrapper 
* 
* @param {string} URL 
* 
* @returns {string || boolean} Returns URL or False 
*/ 
function scrapper(URL) { 

    // Check if URL was provided 
    if(!URL) { 
     return fasle; 
    } 

    // Send out request to URL 
    REQUEST(URL, function(error, response, body) { 

     // Check for errors 
     if(!error && response.statusCode == 200) { 
      console.log(body) // Show the HTML 

      // Recursion 
      let URL = getNextPageURL(body); 
      scrapper(URL); 

     } else { 
      return false; 
     } 

    }); 
} 


// Pass to scrapper function test 
//console.log(getNextPageURL("<span class='next'><a id='nextPage-159c6fa8635' class='page' href='/blablabla'></a></span>")); 

// Start the initial scrapping 
scrapper("http://google.com"); 
+0

謝謝@布萊克爲你的答案,不幸的是我還有一個問題。你的解決方案應該可以工作,但我很友善的颳着一家超市網站。當我第一次訪問網址時,我必須設置位置並選擇我想要的超市,如果我使用它的網址,則不必在每次使用網址時設置位置,但當我使用網址時下一個標記也會將我重定向到選擇您的位置頁面...您知道如何修復它嗎?我希望清楚一點。 – rastafalow

+0

我明白了。我希望在「選擇您的位置」頁後看到該網址。也許我們可以預測其他頁面將被格式化的方式。 –