selenium-webdriver
Bezgłowe przeglądarki
Szukaj…
PhantomJS [C #]
PhantomJS
to w pełni funkcjonalna bezgłowa przeglądarka internetowa z obsługą JavaScript.
Przed rozpoczęciem musisz pobrać sterownik PhantomJS i upewnić się, że umieściłeś go na początku kodu:
using OpenQA.Selenium;
using OpenQA.Selenium.PhantomJS;
Świetnie, teraz do inicjalizacji:
var driver = new PhantomJSDriver();
Spowoduje to po prostu utworzenie nowej instancji klasy PhantomJSDriver. Możesz go używać w taki sam sposób, jak każdego WebDrivera, takiego jak:
using (var driver = new PhantomJSDriver())
{
driver.Navigate().GoToUrl("http://stackoverflow.com/");
var questions = driver.FindElements(By.ClassName("question-hyperlink"));
foreach (var question in questions)
{
// This will display every question header on StackOverflow homepage.
Console.WriteLine(question.Text);
}
}
To działa dobrze. Jednak problemem, który prawdopodobnie napotkałeś, jest to, że podczas pracy z interfejsem użytkownika PhantomJS
otwiera nowe okno konsoli, co w większości przypadków nie jest tak naprawdę potrzebne. Na szczęście możemy ukryć okno, a nawet nieznacznie poprawić wydajność za pomocą PhantomJSOptions
i PhantomJSDriverService
. Pełny przykład działania poniżej:
// Options are used for setting "browser capabilities", such as setting a User-Agent
// property as shown below:
var options = new PhantomJSOptions();
options.AddAdditionalCapability("phantomjs.page.settings.userAgent",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0");
// Services are used for setting up the WebDriver to your likings, such as
// hiding the console window and restricting image loading as shown below:
var service = PhantomJSDriverService.CreateDefaultService();
service.HideCommandPromptWindow = true;
service.LoadImages = false;
// The same code as in the example above:
using (var driver = new PhantomJSDriver(service, options))
{
driver.Navigate().GoToUrl("http://stackoverflow.com/");
var questions = driver.FindElements(By.ClassName("question-hyperlink"));
foreach (var question in questions)
{
// This will display every question header on StackOverflow homepage.
Console.WriteLine(question.Text);
}
}
Wskazówka: kliknij klasę (np. PhantomJSDriverService
) i naciśnij F12, aby zobaczyć dokładnie, co zawierają, wraz z krótkim opisem tego, co robią.
SimpleBrowser [C #]
SimpleBrowser
to lekki WebDriver bez obsługi JavaScript.
Jest znacznie szybszy niż wspomniany PhantomJS
, jednak jeśli chodzi o funkcjonalność, ogranicza się do prostych zadań bez wymyślnych funkcji.
Najpierw musisz pobrać pakiet SimpleBrowser.WebDriver , a następnie umieścić ten kod na początku:
using OpenQA.Selenium;
using SimpleBrowser.WebDriver;
Oto krótki przykład, jak z niego korzystać:
using (var driver = new SimpleBrowserDriver())
{
driver.Navigate().GoToUrl("http://stackoverflow.com/");
var questions = driver.FindElements(By.ClassName("question-hyperlink"));
foreach (var question in questions)
{
// This will display every question header on StackOverflow homepage.
Console.WriteLine(question.Text);
}
}
Bezgłowa przeglądarka w Javie
HTMLUnitDriver
HTMLUnitDriver to najlżejsza implementacja bezgłowej (bez GUI) przeglądarki dla Webdriver opartej na HtmlUnit. Modeluje dokumenty HTML i udostępnia interfejs API, który umożliwia wywoływanie stron, wypełnianie formularzy, klikanie łączy itp., Tak jak w normalnej przeglądarce. Obsługuje JavaScript i współpracuje z bibliotekami AJAX. Służy do testowania i pobierania danych ze strony internetowej.
Przykład: użycie HTMLUnitDriver do pobrania listy pytań z http://stackoverflow.com/
.
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
class testHeadlessDriver{
private void getQuestions() {
WebDriver driver = new HtmlUnitDriver();
driver.get("http://stackoverflow.com/");
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
List<WebElement> questions = driver.findElements(By.className("question-hyperlink"));
questions.forEach((question) -> {
System.out.println(question.getText());
});
driver.close();
}
}
Jest taki sam jak każda inna przeglądarka (Mozilla Firefox, Google Chrome, IE), ale nie ma GUI, wykonanie nie jest widoczne na ekranie.