2017-04-04 13 views
0

zur Zeit habe ich den folgenden Code Selen und PhantomJS in C#:Headless Browser C# und Alternativen

public class Driver 
{ 
    static void Main() 
    { 
     using (var driver = new PhantomJSDriver()) 
     { 
      driver.Navigate().GoToUrl("https://www.website.com/"); 
      driver.Navigate().GoToUrl("https://www.website.com/productpage/"); 
      driver.ExecuteScript("document.getElementById('pdp_selectedSize').value = '10.0'"); //FindElementById("pdp_selectedSize").SendKeys("10.0"); 
      driver.ExecuteScript("document.getElementById('product_form').submit()"); 
      driver.Navigate().GoToUrl("http://www.website/cart/"); 
      Screenshot sh = driver.GetScreenshot(); 
      sh.SaveAsFile(@"C:\temp\test.jpg", ImageFormat.Png); 
     } 
    } 
} 

Mein Ziel ist es, ein Produkt zum Warenkorb hinzugefügt werden zu können und dann automatisch zur Kasse. Der Screenshot ist nur enthalten, um zu testen, ob der Code erfolgreich funktioniert hat. Mein erstes Problem ist, dass ich oft einen Fehler bekomme, dass das Element mit der Produkt-ID "pdp_selectedSize" nicht gefunden werden kann. Ich nehme an, dies liegt daran, dass der Webtreiber die Seite noch nicht geladen hat, also suche ich nach einer Möglichkeit, so lange zu prüfen, bis sie gefunden wird, ohne ein bestimmtes Zeitlimit setzen zu müssen.

Ich bin auch auf der Suche nach schnelleren Alternativen anstelle eines Headless-Browsers zu verwenden. Ich benutze einen kopflosen Browser anstelle von HTTP-Anfragen, weil ich bestimmte Cookies brauche, um auf der Seite auschecken zu können, und diese Cookies werden über Javascript auf der Seite gesetzt. Wenn jemand eine Empfehlung für eine schnellere Methode hat, wäre es sehr dankbar, danke!

+0

Werfen Sie einen Blick auf 'ExpectedConditions' in der [Selenium Reference] (http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp). – Brian

+0

Ist das ein Teil von WebDriverWait? – JBoy

+0

Es funktioniert in Verbindung mit 'WebDriverWait', ja. – Brian

Antwort

0

Für Ihre erste Frage würden Sie sich mit ExpectedConditions' which is part of the WebDriverWait class in Selen `befassen. Das folgende Codebeispiel wurde von hier genommen und dient nur als Referenzpunkt.

using (IWebDriver driver = new FirefoxDriver()) 
{ 
    driver.Url = "http://somedomain/url_that_delays_loading"; 
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
    IWebElement myDynamicElement = wait.Until<IWebElement>(d => 
    d.FindElement(By.Id("someDynamicElement"))); 
} 

Mehr auf WebDriverWaitshere.

Was Ihre zweite Frage betrifft, das ist meiner Meinung nach eine sehr subjektive Sache. Headless Browser sind nicht unbedingt schneller oder langsamer als ein echter Browser. Siehe hierzu article.

+0

Gibt es irgendetwas, das mit der WebRequest-Klasse funktioniert, um Javascript zu verarbeiten? – JBoy

+0

Das bin ich mir nicht 100% sicher. "Selenium" hat jedoch eine Klasse "JExecutor". – Brian

Verwandte Themen