【发布时间】:2021-04-13 14:33:01
【问题描述】:
我正在尝试从 JSP 页面获取一些数据,该页面有一个带有分页的表格,我正在尝试从每个表格页面获取值。
正如我所见,每个元素都是使用由服务器设置的类和名称以及时间戳和其他内容动态创建的,因此我必须在 DOM 上使用尽可能多的通用数据来获取它们。
点击第一个页面后,页面会生成第二个分页器,这将是真正的分页器..
问题是,在我从分页器处理 3 页后,我收到以下错误:
'stale element reference:元素未附加到页面文档 (会话信息:chrome=89.0.4389.114)'
但实际上 DOM 元素存在于页面上,但它是用其他名称和类重新创建的,但无论如何都应该得到它......
这是我的代码:
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);
}
}
这里是一个小的fiddle 页面的样子..
我已经阅读了这个question 并且我还尝试在CATCH 中再次设置我获取元素但没有效果的代码...
【问题讨论】:
标签: c# selenium web-scraping