如何处理 selenium 中 "css selector" 值不断变化的 Web 元素?

How to dealing with the web element that have a changing "css selector" value in selenium?

在 selenium 中,有没有一种方法可以通过提供字段名称来获取 css-选择器值?

我正在尝试编写一些 selenium 案例来填充下一页中的一些输入。

但不幸的是,这个页面上的元素既没有 id 也没有命名。我可以到达这些字段的唯一方法是通过它们的 css-选择器值,就像 :

self.driver.find_element_by_css_selector("...")

此刻我正在看这个网页,

本地访问设置区域的css选择器值为:

#app > div.app > div > div > div.content > div:nth-child(2) > div > div:nth-child(3) > div.section-title

http 文本字段的 css-选择器值为:

#app > div.app > div > div > div.content > div:nth-child(2) > div > div:nth-child(3) > div.row > div:nth-child(1) > div > div.col-8.formik-custom-field > div > input[type=text]

但痛苦的部分是,对于两个 css-选择器值,它的“div:nth-child(3)”部分是保留改变。它取决于导致当前页面的前一页上的输入。 可能是“div:nth-child(4)”, “div:nth-child(5)”,甚至是“div:nth-child(6)”。

所以我在想也许我可以先找到 Local Access Settings 字符串的 css-selector 值,然后以此为基础连接 css-http 文本区域的选择器字符串。

所以我的问题是,如果我在我的 selenium 代码中提供此“本地访问设置”关键字,我如何获得 css-选择器值?

谢谢,

杰克

如果问题正在 CSS 改变 child 个数字,例如 div:nth-child(2)div:nth-child(3) 你可以使用这样的循环

import itertools 
from selenium.common.exceptions import NoSuchElementException

for i in itertools.count(start=1):
    try:
       self.driver.find_element_by_css_selector("#app > div.app > div > div > div.content > div:nth-child(' + str(i) + ')")
    except NoSuchElementException:
       pass

这将尝试从 1 到无限制的 child 数字,您可以将其添加到每个正在变化的 child 在更改元素 child 编号上使用此 (' + str(i) + '),如果问题是其他问题,请确认我