在使用 Selenium 操作网页时,经常会出现一些动态生成的元素或者动态生成的 ID,这给定位元素造成了困难。与动态 ID 相关的情况包括:
<input type="text" id="id-1">
在网页刷新后,ID 将变成 id-2
,id-3
,id-4
……等等。
在每次打开网页时,元素的 ID 发生改变。如下的 HTML 代码:
<input type="text" id="dynamic-id">
每次打开网页后,ID 将是随机生成的,如 id="B18B0B14F4D45BFC027E12AC8F6CE18C"
。这时候需要使用一些技巧来定位这些元素。
解决方法:
使用 xpath 定位元素,xpath 可以使用通配符来匹配部分属性,如 id。例如,使用如下 xpath 就可以匹配上上面的元素:
//input[contains(@id,'id-')]
使用正则表达式匹配动态 ID。在使用 Selenium 定位元素时,可以使用正则表达式作为 ID 的值,如下:
driver.find_element_by_xpath("//input[contains(@id, 'regex:^id-')]")
其中,regex:^id-
就是表示 ID 值以 id-
开头的正则表达式。
总之,使用动态 ID 时,我们需要采取一些技巧来定位这些元素,比如使用通配符、使用正则表达式等等。