2 回答

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
id屬性的值,即ext-gen1076包含一個(gè)數(shù)字,并且顯然是動(dòng)態(tài)生成的。id 屬性值的前綴,即 ext-gen 表示 id 是使用 Ext JS 在運(yùn)行時(shí)生成的。
分機(jī) JS
Ext JS是一個(gè)JavaScript框架,用于為任何現(xiàn)代設(shè)備構(gòu)建數(shù)據(jù)密集型,跨平臺(tái)的Web和移動(dòng)應(yīng)用程序。
此用例
可能你甚至在 JavaScript 呈現(xiàn)完整的 DOM 樹(shù)之前就已經(jīng)識(shí)別了該元素。因此缺少 id 屬性。<table>
識(shí)別 Ext JS 元素
隨著id屬性的值發(fā)生變化,即本質(zhì)上是動(dòng)態(tài)的,您將無(wú)法使用id屬性的完整值,并且只能使用靜態(tài)的部分值。根據(jù)您提供的 HTML:
<table id='ext-gen1076' class='bats-table bats-table--center'>
[...]
</table>
要識(shí)別<>節(jié)點(diǎn),您需要誘導(dǎo) 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')]")))
注意:您必須添加以下導(dǎo)入:
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開(kāi)頭。因此,要唯一標(biāo)識(shí)元素,您需要按如下方式組合 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')]")))
添加回答
舉報(bào)