当前位置: 首页 > 知识库问答 >
问题:

Selenium:stale元素引用:元素未附加到页面文档

汪胡非
2023-03-14

我正在使用C#和Selenium Chromedriver来做一个测试项目,以抓取谷歌地图。

在到达第二个循环之前,它运行良好:

var companyurl = company.GetAttribute("href");

返回

OpenQA. Selenium.过时元素引用:元素未附加到页面文档

这是我所有的代码:

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();

任何帮助将不胜感激!

共有1个答案

薛承志
2023-03-14

你一叫这个:

driver.Navigate().GoToUrl(companyurl);

... 你将收集到的所有元素引用“过时”,包括公司。我猜您应该重新设计算法,以便在导航到其他页面使其元素引用过时之前,从第一页提取并保存所需的所有信息。

 类似资料: