Java + Selenium 無頭瀏覽器模式


執行Selenium腳本時,我們往往不需要盯着電腦看腳本的執行情況,再或者我們的腳本可能被執行在一個無GUI的Linux機器上,那么這時我們都可以使用瀏覽器的Headless模式來執行。

 

Headless Chrome

@Test
    public void OpenChromeTest() {
        String path = System.getProperty("user.dir");
        System.setProperty("webdriver.chrome.driver", path + "\\drivers\\chromedriver.exe");
        ChromeOptions chromeOptions = new ChromeOptions();
//        設置為 headless 模式 (必須)
        chromeOptions.addArguments("--headless");
//        設置瀏覽器窗口打開大小  (非必須)
        chromeOptions.addArguments("--window-size=1920,1080");
        WebDriver driver = new ChromeDriver(chromeOptions);
        driver.get("http://www.baidu.com");
        String title = driver.getTitle();
        System.out.println(title);
        driver.quit();
    }

headless Firefox

Firefox版本要求:

 

  • windows/mac 56+
  • linux 55+

 

geckodriver

 

  • 建議都用最新版
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxBinary;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;

import java.util.concurrent.TimeUnit;

public class HeadlessFirefoxSeleniumExample {
 public static void main(String [] args) {
   FirefoxBinary firefoxBinary = new FirefoxBinary();
   firefoxBinary.addCommandLineOptions("--headless");
   System.setProperty("webdriver.gecko.driver", "/opt/geckodriver");
   FirefoxOptions firefoxOptions = new FirefoxOptions();
   firefoxOptions.setBinary(firefoxBinary);
   FirefoxDriver driver = new FirefoxDriver(firefoxOptions);
   try {
     driver.get("http://www.google.com");
     driver.manage().timeouts().implicitlyWait(4,
         TimeUnit.SECONDS);
     WebElement queryBox = driver.findElement(By.name("q"));
     queryBox.sendKeys("headless firefox");
     WebElement searchBtn = driver.findElement(By.name("btnK"));
     searchBtn.click();
     WebElement iresDiv = driver.findElement(By.id("ires"));
     iresDiv.findElements(By.tagName("a")).get(0).click();
     System.out.println(driver.getPageSource());
   } finally {
     driver.quit();
   }
 }
}

Headless Chrome 和 Headless Firefox 的出現是為了取代PhantomJS。 為啥呢?因為PhantomJS並非真在的瀏覽器,跟真實瀏覽器還存在一定的差異。當然除了上面介紹的三種無頭模式外,Selenium 還自帶了一個HttpUnit的無頭模式(WebDriver driver = new HtmlUnitDriver())同樣並非真在瀏覽器,而且對JS支持不好,一般很少用到。

通過Grid 服務啟動的chrome,設置chrome

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
DesiredCapabilities dc = DesiredCapabilities.chrome();
dc.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
WerbDriver driver = new RemoteWebDriver(new URL(hubURL), dc);

 


免責聲明!

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



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