目前我在c#中使用了selenium和phantomjs以下代码:
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 :(得分: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")));
}
有关WebDriverWaits
here的更多信息。
至于你的第二个问题,在我看来,这是一个非常主观的问题。无头浏览器不一定比真正的浏览器更快或更慢。请参阅此article。