selenium - Python selenium id号是动态的
问题描述
我有一个 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()
但是,身份证号码37_window_close
经常变化。今天 id 是38_window_close
其余的 html 代码保持不变。如何修改我的代码,以使我的代码不会因 ID 的更改而中断?
解决方案
使用aria-label="close button"
属性。
wait.until(EC.presence_of_element_located((By.XPATH, '//*[@aria-label="close button"]'))).click()
或类属性。
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()
推荐阅读
- entity-framework - 实体框架 - 如何在没有视图模型的情况下更新多个表
- python - 如何在高维中做tensorflow segment_max
- excel - 在 vba excel 中处理时间时得到错误的值
- regex - 从文本中打印组名和相应数据
- sql-server - Azure sql 数据库使用情况和成本
- android - StackOverflowError - Gson 的 toJson() 在传递 DataSnapshot 时失败
- ms-access - MS 访问表达式
- python-3.x - 如何将列表中的第 i 个项目附加到另一个列表第 i 个列表中的第 i 个项目时间
- bash - 如何将每个子文件夹(子文件夹)的值分别连接到它们的父文件夹
- python - Python在多元线性回归中选择变量