使用 selenium,是否可以识别具有特定模式的动态 Web 元素选择器?

With selenium, Is it possible to identify a dynamic web element selector that has a specific pattern?

提问人:Wazzuper11 提问时间:9/11/2023 最后编辑:InSyncWazzuper11 更新时间:9/11/2023 访问量:27

问:

我想通过CSS选择器找到一个Web元素,但是每次加载页面时,选择器都会改变,并遵循特定的模式:

选择器的长度始终为 10 个字符

第二个字符始终是介于 1-9 之间的整数

第 7 个字符始终为大写字母

第 10 个字符始终是 a-g 之间的小写字母

例如:

a8DFf3Ac3e

z1Az5fE52b

如果元素看到与此模式匹配的 CSS 选择器,是否可以告诉 selenium webdriver 该元素出现了?

我正在将 selenium webdriver 与 Python 一起使用

python selenium-webdriver css-选择器

评论

0赞 InSync 9/11/2023
那些是什么?es、s 还是别的什么?classid
0赞 Wazzuper11 9/11/2023
它们是 ids id=

答:

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'))
]

它们的工作方式(大部分)相同。您的选择。