Python Selenium等待innerHTML加载

3
我正在尝试等待innerHTML元素加载。以下是我代码的通用版本:
element = WebDriverWait(driver, 120).until(EC.presence_of_element_located((By.XPATH, XPATH)))
element = element.get_attribute('innerHTML')

Element是表格内的标签。该代码位于循环中,该循环应该在数千个ajax页面上每页运行25次。经过一定数量的运行之后,我继续收到这个错误:

selenium.common.exceptions.StaleElementReferenceException: Message: {"errorMessage":"Element is no longer attached to the DOM"...

每次出现这个错误都源于提供的代码的第二行。这让我相信元素正在加载,但是innerHTML加载得不够快,导致了给定的错误消息。我已经尝试了很多方法来解决这个问题,但没有成功。

如何在确认元素存在后使我的代码等待innerHTML加载?


你知道我们可以等待 innerHTML 中出现特定的子字符串或文本吗? - alecxe
它正在从数据库中提取数据。随着循环的运行,元素的innerHTML将会改变数百万次。 - In_Circ
当然可以。element是一个表格中的单元格(tr标签),该表格具有一致的表头(th标签)。每个element的内部HTML在每个页面上会更改25次,而表头在每个页面上都是相同的。 - In_Circ
@In_Circ 尝试等待可见性而不是存在性。存在性只意味着它在DOM中,而不是可操作的。顺便说一下,tr是表格行,td是表格单元格。 - JeffC
你为什么想要获取innerHTML?你想要做什么? - JeffC
显示剩余4条评论
1个回答

2
很好,您正在使用Python,您也可以这样编写等待条件。
innerHTML = WebDriverWait(driver, 5).until(lambda driver: driver.find_element_by_xpath(XPATH).get_attribute("innerHTML"))

or maybe like this

WebDriverWait(driver, 5).until(lambda driver: driver.find_element_by_xpath(XPATH).get_attribute("innerHTML") == "expected text")

Python不允许我在until()函数中使用==运算符。我很确定它不接受布尔值。第一个答案仍然返回相同的错误消息selenium.common.exceptions.StaleElementReferenceException: Message: {"errorMessage":"Element is no longer attached to the DOM" - In_Circ
它不是一个布尔值,而是一个函数。我已经测试过了,它运行得很好。 - Gaurang Shah
这个有效!谢谢!我可以问一下,我们如何使用正则表达式而不是比较字符串?嗯...还可以澄清一下,第二个代码答案中发生的情况是,如果它的innerHTML等于预期文本,那么驱动程序将基于给定的XPATH等待元素,对吗?谢谢! - Ice Bear
我尝试了这个 WebDriverWait(browser, 20).until(lambda browser: re.search(regex,browser.find_element_by_xpath(my_xpath).get_attribute("innerHTML"))),它有效了,谢谢! - Ice Bear

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接