2 回答

TA貢獻1911條經驗 獲得超7個贊
id屬性的值,即ext-gen1076包含一個數字,并且顯然是動態生成的。id 屬性值的前綴,即 ext-gen 表示 id 是使用 Ext JS 在運行時生成的。
分機 JS
Ext JS是一個JavaScript框架,用于為任何現代設備構建數據密集型,跨平臺的Web和移動應用程序。
此用例
可能你甚至在 JavaScript 呈現完整的 DOM 樹之前就已經識別了該元素。因此缺少 id 屬性。<table>
識別 Ext JS 元素
隨著id屬性的值發生變化,即本質上是動態的,您將無法使用id屬性的完整值,并且只能使用靜態的部分值。根據您提供的 HTML:
<table id='ext-gen1076' class='bats-table bats-table--center'>
[...]
</table>
要識別<>節點,您需要誘導 WebDriverWait,并且可以使用以下任一定位器策略:tablevisibility_of_element_located()
用:CSS_SELECTOR
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "table[id^='ext-gen']")))
用:XPATH
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table[starts-with(@id,'ext-gen')]")))
注意:您必須添加以下導入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
但是,還有很多其他元素的id屬性以ext-gen開頭。因此,要唯一標識元素,您需要按如下方式組合 class 屬性:<table>
用:CSS_SELECTOR
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "table.bats-table.bats-table--center[id^='ext-gen']")))
用:XPATH
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table[@class='bats-table bats-table--center' and starts-with(@id,'ext-gen')]")))
添加回答
舉報