提问者:小点点

尝试刮取JSP页面时出现Selenium问题:“元素未附加”


我试图从JSP页面获取一些数据,该页面有一个带有分页的表,我试图从每个表页面获取值。

正如我可以看到每个元素都是动态创建的,带有服务器设置的类和名称以及时间戳和其他东西,所以我必须在DOM上使用尽可能多的通用数据来获取它们。

点击第一页后,页面会生成第二个分页器,这将是真正的分页器。

问题是我从分页器处理了3个页面后,我得到了以下错误:

'陈旧元素引用:元素未附加到页面文档(会话信息:chrome=89.0.4389.114)'

但实际上DOM元素存在于页面上,但它是用其他名称和类重新创建的,但无论如何它都应该是get。。。

这是我的代码:

    var pages = searchResult.FindElements(By.ClassName("custom-pagination"));

    foreach (var page in pages[0].FindElements(By.TagName("input")))
    {
        
        var PageValue = page.GetAttribute("value");
        if (PageValue == "<<") continue;
        if (PageValue == ">") break;
        if (PageValue != "1")
        {
            page.Click();
            WaitUntilElementNotVisible(SelectorByAttributeValue("iawaitpanel", "true"), 30000, driver);
        }

        foreach (var azienda in driver.FindElements(By.ClassName("item_list")))
        {
            DataRow row = table.NewRow();
            row["REGIONE"] = NomiRegioni[IndexRegione];
            row["NOME AZIENDA"] = azienda.FindElement(By.ClassName("txtGreen")).Text;
            var indirizzo = azienda.FindElement(By.ClassName("sede")).Text.Replace("Sede Legale", "").Trim();
            row["INDIRIZZO"] = indirizzo;
            row["CAP"] = indirizzo;
            row["CITTA"] = indirizzo;
            row["MAPS"] = azienda.FindElement(SelectorByAttributeValue("title", "Vai a Google Maps")).GetAttribute("href");
            table.Rows.Add(row);
        }


    }

这是页面外观的一小部分...

我已经读过这个问题,我还试着在CATCH中再次设置类似的代码,在那里我得到了元素,但它没有效果。。。


共1个答案

匿名用户

不要每次在foreach循环中调用FindElements,而是调用它并将输入元素存储在变量中。然后循环这些输入,它似乎每次都在同一页上调用FindElements?