无头浏览器C#和备选方案

无头浏览器C#和备选方案,c#,selenium,cookies,xmlhttprequest,phantomjs,C#,Selenium,Cookies,Xmlhttprequest,Phantomjs,目前,我在c#中使用selenium和phantomjs编写了以下代码: 我的目标是能够添加一个产品到我的购物车,然后自动结帐。屏幕截图只是用来测试代码是否成功运行。我的第一个问题是,我经常遇到一个错误,它找不到产品id为“pdp\u selectedSize”的元素。我假设这是因为webdriver还没有加载页面,所以我正在寻找一种方法来不断检查,直到找到它,而不必设置特定的超时 我也在寻找更快的替代品来代替无头浏览器。我使用无头浏览器而不是http请求,因为我需要某些cookie才能在页面上

目前,我在c#中使用selenium和phantomjs编写了以下代码:

我的目标是能够添加一个产品到我的购物车,然后自动结帐。屏幕截图只是用来测试代码是否成功运行。我的第一个问题是,我经常遇到一个错误,它找不到产品id为“pdp\u selectedSize”的元素。我假设这是因为webdriver还没有加载页面,所以我正在寻找一种方法来不断检查,直到找到它,而不必设置特定的超时


我也在寻找更快的替代品来代替无头浏览器。我使用无头浏览器而不是http请求,因为我需要某些cookie才能在页面上签出,这些cookie是通过页面内的javascript设置的。如果有人推荐更快的方法,我们将不胜感激,谢谢

对于您的第一个问题,您应该考虑使用
ExpectedConditions',这是
Selenium`WebDriverWait
类的一部分。以下代码示例取自此处,仅用作参考点

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")));
}
使用(IWebDriver=new FirefoxDriver())
{
驱动程序Url=”http://somedomain/url_that_delays_loading";
WebDriverWait wait=新的WebDriverWait(驱动程序,TimeSpan.FromSeconds(10));
IWebElement myDynamicElement=等待.直到(d=>
d、 FindElement(By.Id(“someDynamicElement”));
}
有关
WebDriverWaits
的详细信息


至于你的第二个问题,我认为这是一件非常主观的事情。无头浏览器并不一定比真正的浏览器快或慢。请参见。

查看中的
预期条件
。这是WebDriverWait的一部分吗?它与
WebDriverWait
一起工作,是的。谢谢,我让该部分工作了。你能帮我回答第二个问题吗?不客气。至于你的第二个问题,我能给你的任何答案都是完全主观的,可能对你没有实际价值。话虽如此,我发现这本书读得很好。是否有任何东西可以与WebRequest类一起处理javascript?我不是100%确定Selenium’确实有一个‘JSExecutor’类。
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")));
}