selenium-webdriver
Headless-Browser
Suche…
PhantomJS [C #]
PhantomJS
ist ein voll ausgestatteter, Headless-Webbrowser mit JavaScript-Unterstützung.
Bevor Sie beginnen, müssen Sie einen PhantomJS- Treiber herunterladen. Stellen Sie sicher, dass Sie diesen Code am Anfang Ihres Codes angeben :
using OpenQA.Selenium;
using OpenQA.Selenium.PhantomJS;
Toll, jetzt zur Initialisierung:
var driver = new PhantomJSDriver();
Dadurch wird einfach eine neue Instanz der PhantomJSDriver-Klasse erstellt. Sie können es dann wie jeden WebDriver verwenden:
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);
}
}
Das funktioniert gut. Das Problem, auf das Sie wahrscheinlich gestoßen sind, ist, dass PhantomJS
beim Arbeiten mit der Benutzeroberfläche ein neues Konsolenfenster öffnet, das in den meisten Fällen nicht wirklich erwünscht ist. Glücklicherweise können wir das Fenster ausblenden und die Leistung mit PhantomJSOptions
und PhantomJSDriverService
sogar geringfügig verbessern. Vollständiges Arbeitsbeispiel unten:
// 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);
}
}
Pro-Tipp: Klicken Sie auf eine Klasse (z. B. den PhantomJSDriverService
) und drücken Sie F12, um genau zu sehen, was sie enthalten, und beschreiben Sie kurz, was sie tun.
SimpleBrowser [C #]
SimpleBrowser
ist ein SimpleBrowser
WebDriver ohne JavaScript-Unterstützung.
Es ist erheblich schneller als ein zuvor genanntes PhantomJS
, ist jedoch in PhantomJS
auf die Funktionalität auf einfache Aufgaben ohne ausgefallene Funktionen beschränkt.
Zuerst müssen Sie das SimpleBrowser.WebDriver- Paket herunterladen und dann diesen Code am Anfang einfügen:
using OpenQA.Selenium;
using SimpleBrowser.WebDriver;
Hier ist ein kurzes Beispiel, wie man es benutzt:
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);
}
}
Headless Browser in Java
HTMLUnitDriver
HTMLUnitDriver ist die einfachste Implementierung eines Headless-Browsers (ohne GUI) für Webdriver, der auf HtmlUnit basiert. Es modelliert HTML-Dokumente und stellt eine API zur Verfügung, mit der Sie Seiten aufrufen, Formulare ausfüllen, auf Links klicken können, wie Sie es in Ihrem normalen Browser tun. Es unterstützt JavaScript und arbeitet mit AJAX-Bibliotheken. Es wird zum Testen und Abrufen von Daten von der Website verwendet.
Beispiel: Verwendung von HTMLUnitDriver zum Abrufen einer Fragenliste von 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();
}
}
Dies ist mit jedem anderen Browser (Mozilla Firefox, Google Chrome, IE) identisch, es verfügt jedoch nicht über eine grafische Benutzeroberfläche.