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

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

祁乐邦
2023-03-14

我试图从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个答案

龙安阳
2023-03-14

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

 类似资料:
  • 我试图理解为什么在我试图显示从网站获取的项目时会出现错误。我也在使用谷歌chrome浏览器。 这是我代码的其他部分 每当我使用"chromeDriver.FindElement(By.ID(something.link.text))。单击();",它会给出一个错误。我不能显示我提取的数据。 在错误消息中,它显示“OpenQA.Selenium.StaleElementReferenceExcept

  • 我正在尝试使用LinkText单击一个元素。如: 但是,我得到以下错误: 即使元素在网页上可见,它也无法使用LinkText找到该元素,这有什么原因吗?有解决这个问题的方法吗,请帮忙?

  • 问题内容: 我试图了解为什么在尝试显示从网站上获取的项目时会出现错误。我也在浏览器中使用google chrome。 还有我代码的其他部分 每当我使用“ chromeDriver.FindElement(By.Id(“ something.link.text”))。Click();“ ,它给出一个错误。我无法显示提取的数据。 在错误消息中,它说“ OpenQA.Selenium.StaleElem

  • 我的程序抛出一条错误消息“stale element reference:element未附加到页面文档”。当我查看前面的帖子(如Python Selenium陈旧元素修复)时,我发现我没有在调用click函数后更新url。我更新了网址。然而,它并没有解决这个问题。谁能指出我哪里出错了?下面是我的代码:

  • 我得到了这个错误,当我试图点击一个下拉ID: 我想用这个代码: 有没有什么方法可以防止无限循环,或者更好的方法在我得到这个异常后点击id?

  • 我正在构建一个刮网站的c#应用程序。我认为这个问题是因为页面在一次又一次提交表单后被重新加载而导致的。我必须从选择列表中选择一个选项,然后按回车键,等待页面重新加载新结果。但是重新加载后会导致此错误; 我的代码是这样的; 我也尝试过类似的东西; 时间不多了,我有个例外,时间不多了。