2017-04-04 122 views
0

目前我使用硒和phantomjs在C#中有下面的代碼:模擬瀏覽器C#和替代

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); 
     } 
    } 
} 

我的目標是能夠將產品添加到我的車,然後自動結帳。屏幕截圖僅用於測試代碼是否成功工作。我的第一個問題是,我經常會遇到一個錯誤,它無法找到產品ID爲「pdp_selectedSize」的元素。我假設這是因爲webdriver尚未加載頁面,所以我正在尋找一種方法來持續檢查,直到找到它而不必設置特定的超時。

我也在尋找更快的替代品來代替無頭瀏覽器。我使用了無頭瀏覽器而不是http請求,因爲我需要某些cookie才能在頁面上籤出,並且這些cookie是通過頁面內的javascript設置的。如果有人推薦更快的方法,將不勝感激,謝謝!

+0

查看[Selenium參考資料](http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp)中的'ExpectedConditions'。 – Brian

+0

是WebDriverWait的一部分嗎? – JBoy

+0

它與'WebDriverWait'結合使用,是的。 – Brian

回答

0

對於你的第一個問題,你應該看看使用ExpectedConditions' which is part of the WebDriverWait class in Selenium`。以下代碼示例是從這裏獲取的,僅作爲參考點。

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"))); 
} 

更多關於WebDriverWaitshere

至於你的第二個問題,在我看來,這是一件非常主觀的事情。無頭瀏覽器不一定比真正的瀏覽器更快或更慢。請參閱article

+0

有沒有什麼與WebRequest類一起處理JavaScript? – JBoy

+0

我不是100%確定的。 'Selenium'雖然有一個'JSExecutor'類。 – Brian