如何让 selenium 找到一个 Id 改变的元素

How do I make selenium find an element whos Id changes

所以我使用 selenium 和 运行 进行自动化,遇到这样一个问题:每次刷新页面时,元素 ID 都会发生变化,无论我是否复制 XPATH、CSS 选择器、ID,它们都是其中有一个数字会发生变化。

所以我使用的代码很简单,我只想点击我可以完成的按钮

browser.find_element(by=By.CSS_SELECTOR, value='*VALUE HERE*').click()

但我不知道该输入什么值。 这是 HTLM 代码

<a class="x4-tab x4-unselectable x4-box-item x4-tab-default x4-noicon x4-tab-noicon x4-tab-default-noicon x4-top x4-tab-top x4-tab-default-top x4-tab-after-title x4-active x4-tab-active x4-tab-default-active x4-top-active x4-tab-top-active x4-tab-default-top-active" hidefocus="on" unselectable="on" id="tab-1965" tabindex="0" data-ui-comp-name="wm-np-tab-wrkstn" style="right: auto; left: 66px; margin: 0px; top: 0px;">
<span id="tab-1965-btnWrap" role="presentation" class="x4-tab-wrap" unselectable="on">
  <span id="tab-1965-btnEl" class="x4-tab-button" role="presentation">
    <span id="tab-1965-btnInnerEl" class="x4-tab-inner x4-tab-inner-center" 
    unselectable="on">Workstations</span>
    <span role="presentation" id="tab-1965-btnIconEl" class="x4-tab-icon-el  " unselectable="on" 
    style="">
  </span>
</span>
</span>
</a>

如果您查看 HTML,在您看到数字 1965 的任何地方,如果刷新页面,该数字将会改变。无论那个数字是多少,我如何让 selenium 找到这个元素?

此外,不确定这是否重要,但这全部在一个 iframe 中,我通过使用

获得了 selenium 目标
frame1 = browser.find_element(by=By.CLASS_NAME, value='defaultView')

browser.switch_to.frame(frame1)

此外,另一个问题是 HTML 代码与其他按钮几乎相同,按钮之间的唯一区别是数字(会改变)和“工作站”的位置。这是旁边的另一个按钮的示例,这个按钮用于服务器。

<span id="tab-1964-btnWrap" role="presentation" class="x4-tab-wrap" unselectable="on">
  <span id="tab-1964-btnEl" class="x4-tab-button" role="presentation">
    <span id="tab-1964-btnInnerEl" class="x4-tab-inner x4-tab-inner-center" 
    unselectable="on">Servers</span>
    <span role="presentation" id="tab-1964-btnIconEl" class="x4-tab-icon-el" 
    unselectable="on" style="">
  </span>
</span>
</span>
</a>

您可以为此使用 XPath:

browser.find_element(by=By.XPATH, value="//span[starts-with(@id, 'tab-') and contains(@id, '-btnEl')]").click()