【发布时间】:2021-12-15 15:12:17
【问题描述】:
我正在使用 C# 和 Selenium Chromedriver 做一个抓取 Google 地图的测试项目。
它运行良好,直到它到达这里的第二个循环:
var companyurl = company.GetAttribute("href");
返回:
OpenQA.Selenium.StaleElementReferenceException:过时的元素引用:元素未附加到页面文档
这是我所有的代码:
var chromeDriverService = ChromeDriverService.CreateDefaultService();
chromeDriverService.HideCommandPromptWindow = true;
ChromeOptions options = new ChromeOptions();
options.AddExcludedArgument("excludeSwitches");
options.AddExcludedArgument("useAutomationExtension");
options.AddArguments("ignore-certificate-errors");
options.AddArguments("start-maximized");
options.AddArguments("enable-automation");
options.AddArguments("--log-level=OFF");
//options.AddArguments("headless");
options.AddArguments("--disable-blink-features=AutomationControlled");
var driver = new ChromeDriver(chromeDriverService, options);
Actions builder = new Actions(driver);
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(15);
driver.Navigate().GoToUrl("https://www.google.co.uk/maps/search/lincoln+plumbers/");
try
{
driver.FindElement(By.CssSelector("#yDmH0d > c-wiz > div > div > div > div.NIoIEf > div.G4njw > div.AIC7ge > form > div > div > button > span")).Click();
}
catch
{
}
IList<IWebElement> companies = driver.FindElements(By.XPath("//*[@id=\"pane\"]/div/div[1]/div/div/div[4]/div[1]/div/div/a"));
foreach (var company in companies)
{
try
{
var companyurl = company.GetAttribute("href");
driver.Navigate().GoToUrl(companyurl);
var companyName = driver.FindElement(By.TagName("h1")).Text;
Console.WriteLine(companyName);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
Console.ReadLine();
任何帮助将不胜感激!
【问题讨论】:
-
print
companyurl在那个 try 块中,我相信这应该打印第一个并且对于第二次迭代它会得到那个异常? -
改成那个和完全相同的结果@cruisepandey
-
有输出吗?我期待打印第一个公司 URL。
-
是的,第一次打印。然后错误来了。
标签: c# selenium selenium-chromedriver