以下是我想通过Selenium WebDriver做的事情:
它的作用是在过滤之前点击第一个广告(整个页面不会重新加载进行过滤,只是广告列表)
var url = "https://www.for-sale.ie/adidas";
RemoteWebDriver _driver = new FirefoxDriver();
_driver.Manage().Window.Maximize();
_driver.Navigate().GoToUrl(url);
_driver.FindElement(By.CssSelector("#jsFilterItems_2 > ul > li:nth-child(2) > div > label > input")).Click();
System.Threading.Thread.Sleep(3000);
_driver.FindElement(By.CssSelector("article > .box_product_item.art-div > .listview > .middle > h2")).Click();
我发现使其工作的唯一方法是添加Thread.Sleep
,这不是最佳解决方案。我也试图管理超时但没有成功。有什么建议吗?
答案 0 :(得分:0)
以下是我在评论中通过Grasshopper找到的解决方案:
var url = "https://www.for-sale.ie/adidas";
_driver = new FirefoxDriver();
_driver.Manage().Window.Maximize();
_driver.Navigate().GoToUrl(url);
var firstAd = _driver.FindElement(By.CssSelector("article > .box_product_item.art-div > .listview > .middle > h2"));
_driver.FindElement(By.CssSelector("#jsFilterItems_2 > ul > li:nth-child(2) > div > label > input")).Click();
var wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.StalenessOf(firstAd));
_driver.FindElement(By.CssSelector("article > .box_product_item.art-div > .listview > .middle > h2")).Click();
首先,我获得了该页面的第一个广告(在过滤之前),然后我希望当我点击过滤器时,此广告不再通过StalenessOf
功能附加到DOM。我终于可以获得过滤后的广告了。