List<IWebElement> shittyBiz = new List<IWebElement>();
var myEles = driverGC.FindElements(By.CssSelector("div.search-result"));
for (int i = 0;i<=1000;i++){
myEles = driverGC.FindElements(By.CssSelector("div.search-result"));
foreach (IWebElement business in myEles)
{
driverGC.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
var starRating = " ";
try
{
starRating = business.FindElement(By.CssSelector("div.biz-rating > div.i-stars")).GetAttribute("title");
}
catch (OpenQA.Selenium.NoSuchElementException)
{
MessageBox.Show("No stars");
continue;
}
starRating = Regex.Replace(starRating, @"[A-Za-z\s]", string.Empty);
float stars = float.Parse(starRating);
MessageBox.Show(stars.ToString());
if (stars <= 3)
{
//shittyBiz.Add(starRating);
MessageBox.Show("Shitty");
driverGC.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
var bizName = business.FindElement(By.CssSelector(".biz-name"));
MessageBox.Show(bizName.Text);
shittyBiz.Add(bizName);
var bizLocation = business.FindElement(By.CssSelector(".secondary-attributes"));
MessageBox.Show(bizLocation.Text);
shittyBiz.Add(bizLocation);
}
else
{
driverGC.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
MessageBox.Show("Too good");
}
}
try
{
driverGC.FindElement(By.CssSelector("div.arrange_unit > a.u-decoration-none")).Click();
continue;
}
catch (OpenQA.Selenium.NoSuchElementException)
{
MessageBox.Show("No more pages");
return;
//driverGC.Quit();
}
}
我可以让程序第一次运行正常,但在最后使用try之后,转到下一页,我在第一次尝试时几乎立即在starRating上得到StaleElementReferenceException错误。我已经尝试了所有我能想到的东西,但不确定为什么它会让我犯这个错误。
答案 0 :(得分:0)
当刷新或更改DOM时,驱动程序会丢失之前定位的所有元素。移至新页面后myEles
无效,这就是当您尝试使用StaleElementReferenceException
查找其他元素时business
myEles
的原因。解决方案是定位for
每次迭代并使用带int size = 1;
for (int i = 0; i < size; ++i)
{
var myEles = driverGC.FindElements(By.CssSelector("div.search-result"));
size = myEles.Count();
driverGC.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
var starRating = " ";
try
{
starRating = myEles[i].FindElement(By.CssSelector("div.biz-rating > div.i-stars")).GetAttribute("title");
}
//...
// and don't forget to go back
driver.Navigate().Back();
}
循环的索引保留位置
mix.combine(['resources/libs/jquery/dist/jquery.min.js', 'resources/libs/semantic/dist/semantic.js'], 'public/js/vendor.js')
.combine(['resources/libs/semantic/dist/semantic.min.css', 'resources/libs/font-awesome/css/font-awesome.min.css'], 'public/css/vendor.css')
.js('resources/assets/js/scripts/login.validator.js', 'public/js/scripts.js')
.less('resources/assets/less/style.less', 'public/css');