当id是动态的时,如何在html中找到元素?我的目标是找到元素并选择i下的“option”

2024-04-25 12:28:43 发布

您现在位置:Python中文网/ 问答频道 /正文

HTML格式:

<select id="XYZ_SV_12345" class="clsSelectControl pv" multiple="" size="11" aria-multiselectable="true" aria-invalid="false" style="width: auto;">

这里的id是动态的,但前几个字符总是相同的,即:“XYZ\u SV\u”是常量,其余的数值是动态的。你知道吗

我尝试使用以下方法查找元素,但没有祝你好运帮我找到元素。你知道吗

driver.find_element_by_xpath("//*[contains(@id, 'XYZ_SV_']")
driver.find_element_by_css_selector('input[id*="XYZ_SV_"]')
driver.find_element_by_css_selector(".clsSelectControl.pv")

Tags: id元素byhtmldriver动态elementfind
3条回答

将css选择器input[id*="XYZ_SV_"]替换为input[id^='XYZ_SV_'],如果selenium能够在dom中找到唯一的条目,那么它应该可以工作。你知道吗

注意,*if表示子串匹配,而^表示start-with。你知道吗

代码:

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

如果contains不起作用,我不认为start with会起作用,因为id格式会类似(我的假设),如果您要查找的id是许多可用的类似start with id中的第一个,那么selenium会选择它。或者,您可以将id与类组合在一起以形成唯一的组合。你知道吗

也许你可以试试

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

如果这不起作用。你应该寻找祖先,直到你只找到一个元素,然后遍历回到你需要的地方。可以添加整个Dom吗?这样我就可以形成xpath了。 试着用一种独特的方法来识别元素。您可以转到父级/同级/祖先以获取要搜索的元素。你知道吗

selenium 4的Alpha版本已经发布了,您可以添加它并使用附近的标记名,然后选择relativeBy的above、below、toRightOf、toLeftOf、near(50像素)方法。你知道吗

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

下面是您应该使用的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

相关问题 更多 >

    热门问题