close

  上次說到我想用java做自動登入系統,不過自動登入系統也有動態網站(有javaScript的程式碼,如Youtube網站)與非動態網站(無javaScript的程式碼,如痞客邦)的區別。非動態網站因為較簡單,所以在這裡就不贅訴了,直接給大家附上相關的連結 Link,如果之後有時間的話再發一篇文章跟大家講解,今天的重點主要擺在動態網頁的爬蟲指令

 


[初始設定]

  你可以使用這些指令來控制程式幫你操控網頁的運作,首先要先import需要的套件,

import org.openqa.selenium.JavascriptExecutor;

  然後需要呼叫JavascriptExecutor

JavascriptExecutor js = (JavascriptExecutor)driver;

 

[輸入文字]

  呼叫後,就可以用程式來控制網頁的運作囉,那首先教大家如何將文字輸入你想要輸入的地方,像是輸入帳號,輸入密碼的欄位。要告訴程式這些欄位的位置,你需要先到瀏覽器中,到你想要輸入的地方按下右鍵檢查,然後再按右鍵,複製xpath

1.png

 

2.png

 

 

複製完後使用以下程式碼輸入文字。

String username="123456";
js.executeScript("arguments[1].value = arguments[0]; ",username,driver.findElement(By.xpath("//*[@id=\"identifierId\"]")));

  js.executeScript("arguments[1].value = arguments[0]; ",要輸入的文字,要輸入之欄位的xpath),為甚麼第一欄是arguments[1]...的其實我也不知道,不過就照打吧,反正這樣就可以輸入文字進去欄位囉。如果要輸入密碼也是用同樣的方法。


 

[點擊按鈕]

  第二個要教大家的是如何點擊某個按鈕,首先也是在按鈕那邊按右鍵檢查,然後再按右鍵複製按鈕的xpath。之後用以下指令就可以點擊按鈕囉,以下是點選google登入畫面的繼續按紐

js.executeScript("arguments[0].click();",driver.findElement(By.xpath("//*[@id=\"identifierNext\"]")));

 js.executeScript("arguments[0].click();",driver.findElement(By.xpath(按鈕的xpath))),為甚麼第一欄是arguments[1]...的我其實還是不知道,大家就照打吧XD,反正這樣就可以點擊按鈕囉。


 

[得到innerText]

  再來,如果要獲得動態網頁中某一段的內部文字,比如我想要去抓取youtube的觀看人數的話可以用以下指令:

String theTextIWant=null;
theTextIWant = js.executeScript("return arguments[0].innerHTML;",driver.findElement(By.xpath("//*[@id=\"count\"]/yt-view-count-renderer/span[1]"))).toString();

  不過要注意的是,像youtube這種動態網站,有時要讀取會花不少時間,所以最好需要等javascript跑完,或是多執行幾次,比較不會失敗。等待可以用以下指令

js.executeScript("return document.readyState").toString().equals("complete");

  把他加到if中,如果true的話就開始執行

if(js.executeScript("return document.readyState").toString().equals("complete")){
......
......
......
}

 

[得到網頁原始碼]

  最後,教大家如何取得動態網頁的原始碼,也就是你在一個網站中按F12所得到的程式碼,這個按ctrl-U得到的靜態原始碼不同喔!它是動態的程式碼~~~ 請用以下指令

String html = js.executeScript("return document.body.innerHTML;").toString();

 

[完整程式碼]

   這個程式是爬取youtube的觀看人數,然後快速登入google帳號的一支java程式。然後因為程式是圖形介面的,造成程式碼非常的長...,全部貼上來有點不方便,因此我將它放在github上面,有興趣的朋友們可以去下載看看囉。附上連結: Link (程式在 src/YoutubeWebCrawl  資料夾中的 yotubeGUI.java 檔案 )

 

arrow
arrow
    創作者介紹
    創作者 charliech17 的頭像
    charliech17

    國全張的部落格

    charliech17 發表在 痞客邦 留言(0) 人氣()