java模擬登錄優酷

很久沒有寫文章分(裝)享(逼)了,趁着國慶節有充足的時間分享一下最近所學。 html

我愛學習.jpg

需求背景

最近被分到一個活,給你一個視頻地址,須要播放這個視頻並錄屏保存java

步驟

  • 打開網頁
  • 登錄
  • 播放
  • 錄屏

疑難問題

  • 有些視頻須要登錄之後才能播放
  • 有些網站播放須要安裝flash

前期調研

由於要模擬打開網頁的操做,須要使用瀏覽器,因此想使用無頭瀏覽器去實現。無頭瀏覽器有不少種,由於本身學習的語言是java,因此重點調查了支持java語言的無頭瀏覽器。比較經常使用的是PhantomJS、Selenium、jBrowserDriver。最終肯定使用Selenium,由於另外兩種方式不支持flash播放,那麼有些視頻網站的地址就不能正確播放。 對於登錄的問題,原本決定使用cookie登錄,後來在寫Selenium簡單使用例子的時候以爲能夠經過獲取網頁的XPath,模擬填入內容和點擊的效果。git

前期準備

由於selenium須要依賴驅動,因此首先得安裝drive。以google瀏覽器爲例,須要安裝chromedriver。須要注意:github

  • 安裝的chromedriver須要和google版本一致
  • 安裝位置必須和google同一路徑,不然將會報錯:
Exception in thread "main" java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://chromedriver.storage.googleapis.com/index.html
	at com.google.common.base.Preconditions.checkState(Preconditions.java:847)
	at org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:124)
	at org.openqa.selenium.chrome.ChromeDriverService.access$000(ChromeDriverService.java:32)
	at org.openqa.selenium.chrome.ChromeDriverService$Builder.findDefaultExecutable(ChromeDriverService.java:137)
	at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:339)
	at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:88)
	at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:116)
	at com.shuwen.test.Selenium2Test.main(Selenium2Test.java:15)
複製代碼
  • 添加selenium依賴

編碼實現

  • 打開瀏覽器
//指定chromedriver安裝位置,注意:必須和chrome在同個目錄下
System.setProperty("webdriver.chrome.driver", "/Applications/Google Chrome.app/Contents/MacOS/chromedriver");
 //設置google瀏覽器選項
ChromeOptions chromeOptions = new ChromeOptions();
//指定瀏覽器全屏
chromeOptions.addArguments("--start-fullscreen");
//建立chrome
WebDriver driver = new ChromeDriver(chromeOptions);
複製代碼

經過 ChromeOptions設置了一些瀏覽器參數,好比但願瀏覽器全屏打開 執行此段代碼之後會發現彈出了一個瀏覽器,而且打開了指定的頁面,可是: web

頁面.png
須要點擊登錄一下才能登錄

  • 模擬點擊登錄 檢查該頁面
    點擊.png
    能夠很快的得到xpath爲//*[@id="ykPlayer"]/div[2]/div[2]/div[5]/div[2]/a 模擬點擊
driver.findElement(By.xpath("//*[@id=\"ykPlayer\"]/div[2]/div[2]/div[5]/div[2]/a")).click();
複製代碼

.click 模擬點擊操做chrome

  • 輸入帳號密碼登錄
    image.png
    以一樣的方式得到對應的xpath路徑 帳號xpath://*[@id=\"YT-ytaccount\"] 密碼xpath://*[@id=\"YT-ytpassword\"] 登錄xpath://*[@id=\"YT-nloginSubmit\"]
driver.findElement(By.xpath("//*[@id=\"YT-ytaccount\"]")).sendKeys("YourAccount");
        driver.findElement(By.xpath("//*[@id=\"YT-ytpassword\"]")).sendKeys("YourPassword");
        driver.findElement(By.xpath("//*[@id=\"YT-nloginSubmit\"]")).click();
複製代碼

.sendKey往輸入框填入指定數據api

  • 退出瀏覽器
driver.quit();
複製代碼
  • 完整demo
package com.cqupt.login.youku;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

/**
 * 模擬登錄優酷
 *
 * @author hetiantian
 * @date 2018/10/01
 * */
public class YouKuLogin {
    public static void main(String[] args) throws InterruptedException {
        //指定chromedriver安裝位置,注意:必須和chrome在同個目錄下
        System.setProperty("webdriver.chrome.driver", "/Applications/Google Chrome.app/Contents/MacOS/chromedriver");
        //設置google瀏覽器選項
        ChromeOptions chromeOptions = new ChromeOptions();
        //指定瀏覽器全屏
        chromeOptions.addArguments("--start-fullscreen");
        //建立chrome
        WebDriver driver = new ChromeDriver(chromeOptions);

        // 使用它訪問 Google
        driver.get("https://v.youku.com/v_show/id_XMzYxMDM4MzY3Ng==.html");
        Thread.sleep(2*1000);

        //模擬點擊登錄
        driver.findElement(By.xpath("//*[@id=\"ykPlayer\"]/div[2]/div[2]/div[5]/div[2]/a")).click();
        Thread.sleep(2*1000);

        //模擬點擊登錄
        driver.findElement(By.xpath("//*[@id=\"YT-ytaccount\"]")).sendKeys("YourAccount");
        driver.findElement(By.xpath("//*[@id=\"YT-ytpassword\"]")).sendKeys("YourPassword");
        driver.findElement(By.xpath("//*[@id=\"YT-nloginSubmit\"]")).click();

        //讓視頻加載完成
        Thread.sleep(2000);

        // 檢查頁面標題
        System.out.println("Page title is: " + driver.getTitle());


        //退出瀏覽器
        driver.quit();
    }
}
複製代碼

附:gitub地址:github.com/TiantianUpu…瀏覽器

相關文章
相關標籤/搜索