Python selenium id 号码是动态的

Python selenium id number is dynamic

我有一个 html,如下所示:

<div class="v-window-outerheader"><div class="v-window-maximizebox" tabindex="0" role="button" aria-label="maximize button" id="38_window_maximizerestore"></div>
    <div class="v-window-closebox" tabindex="0" role="button" aria-label="close button" id="38_window_close"></div>

此代码用于登录网站时弹出的消息框。

我一直在使用下面的代码点击右上角的X来关闭弹出消息:

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait, Select
from selenium.webdriver.common.keys import Keys
path_to_chromedriver = r'C:\chromedriver'  # change path as needed
browser = webdriver.Chrome(executable_path=path_to_chromedriver)
wait = WebDriverWait(browser, 10)
browser.get("https://ftrcenter.pjm.com/ftrcenter/pages/secure/")
wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="37_window_close"]'))).click()

但是,ID 号37_window_close 经常更改。今天的 id 是 38_window_close html 代码的其余部分保持不变。如何修改我的代码,以免我的代码因 ID 更改而中断?

弹出框如下,右上角X关闭:

使用 aria-label="close button" 属性。

wait.until(EC.presence_of_element_located((By.XPATH, '//*[@aria-label="close button"]'))).click()

或class属性。

wait.until(EC.presence_of_element_located((By.XPATH, '//*[@class="v-window-closebox"]'))).click()

或使用包含 ID

wait.until(EC.presence_of_element_located((By.XPATH, '//*[contains(@id,"_window_close")]'))).click()

对于动态 ID,您可以匹配子字符串而不是确切的字符串。 使用下面的 XPath:

//div[contains(@id,"_window_close")]

或CSS:

div[id*="_window_close"]

希望这对您有所帮助:)