ID为动态时,如何在html中查找元素?我的目的是找到元素并在其下选择“选项”

HTML:

Honor_Student

此处的id是动态的,但前几个字符始终相同,即:“ XYZ_SV_”是常量,其余数值是动态的。

我尝试使用以下方法查找元素,但没有运气。请帮我找到元素。

<select id="XYZ_SV_12345" class="clsSelectControl pv" multiple="" size="11" aria-multiselectable="true" aria-invalid="false" style="width: auto;">
linlf06 回答:ID为动态时,如何在html中查找元素?我的目的是找到元素并在其下选择“选项”

这是您应该使用的xpath。

//select[starts-with(@id,'XYZ_SV_')]

下面是代码。

driver.find_element_by_xpath("//select[starts-with(@id,'XYZ_SV_')]")

截屏: enter image description here

如果要使用CSS,请检查以下内容。

select[id^='XYZ_SV_']

下面是代码

driver.find_element_by_css_selector("select[id^='XYZ_SV_']")

截屏: enter image description here

,

将css选择器input[id*="XYZ_SV_"]替换为input[id^='XYZ_SV_'],如果selenium在dom中找到唯一的条目,它应该起作用。

请注意,如果*用于 subString 匹配,而^则表示start-with

代码:

driver.find_element_by_css_selector("input[id^='XYZ_SV_']")
,

如果contains不起作用,我认为ID格式不会类似(我的假设),如果您要查找的ID是许多可用的类似ID开头中的第一个,则Selenium会选择它那。或者,您可以将id与class组合以形成唯一的组合。

也许您可以尝试类似的

//select[starts-with(@id,'XYZ_SV_') and contains(@class,'clsSelectControl')]

如果这不起作用。您应该先找祖先,直到找到一个要素,然后再遍历所需的要素。您能添加整个Dom以便我形成xpath吗? 尝试获得一种识别元素的独特方法。您可以转到父母/兄弟姐妹/祖先来查找您要搜索的元素。

硒4的Alpha版本已经发布,您可以添加它并使用附近的标记名,然后在relativeBy的,toRightOf,toLeftOf,near(50pixel)方法的上方,下方进行查找。

(我的建议是在生产稳定的最终版本之前,不要在生产环境中使用硒4,但是可以在本地环境中试用)

,

您已经指出 id 属性是 dynamic ,并且 id 属性的前几个字符始终相同,即“ XYZ_SV_ ”,因此您必须为element_to_be_clickable()引入 WebDriverWait ,并且可以使用以下任一解决方案:

  • 使用CSS_SELECTOR

    element = WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"select.clsSelectControl.pv[id^='XYZ_SV_']")))
    
  • 使用XPATH

    element = WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//select[@class='clsSelectControl pv' and starts-with(@id,'XYZ_SV_')]")))
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
本文链接:https://www.f2er.com/3126627.html

大家都在问