提问人:Wazzuper11 提问时间:9/11/2023 最后编辑:InSyncWazzuper11 更新时间:9/11/2023 访问量:27
使用 selenium,是否可以识别具有特定模式的动态 Web 元素选择器?
With selenium, Is it possible to identify a dynamic web element selector that has a specific pattern?
问:
我想通过CSS选择器找到一个Web元素,但是每次加载页面时,选择器都会改变,并遵循特定的模式:
选择器的长度始终为 10 个字符
第二个字符始终是介于 1-9 之间的整数
第 7 个字符始终为大写字母
第 10 个字符始终是 a-g 之间的小写字母
例如:
a8DFf3Ac3e
z1Az5fE52b
如果元素看到与此模式匹配的 CSS 选择器,是否可以告诉 selenium webdriver 该元素出现了?
我正在将 selenium webdriver 与 Python 一起使用
答:
1赞
InSync
9/11/2023
#1
仅使用 CSS 选择器是无法实现的,但 JS 脚本就足够了:
elements = driver.execute_script(
'''
return [...document.querySelectorAll('[id]')]
.filter(element => element.id.match(/^.[1-9]....[A-Z].[a-g]$/))
'''
)
上面的代码片段选择每个元素,这些元素具有与正则表达式、JavaScript 方式匹配的元素。当然,你可以在 Python 中做同样的事情:id
^.[1-9]....[A-Z].[a-g]$
By.CSS_SELECTOR
elements_with_id = driver.find_elements(By.CSS_SELECTOR, '[id]')
elements_with_matching_id = [
element for element in elements_with_id
if re.fullmatch(r'.[1-9]....[A-Z].[a-g]', element.get_attribute('id'))
]
它们的工作方式(大部分)相同。您的选择。
评论
class
id