Python идентификатор селена динамический - PullRequest
0 голосов
/ 05 мая 2020

У меня есть 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 меняется время от времени. Сегодня идентификатор 38_window_close Остальная часть кода html остается прежней. Как мне изменить свой код, чтобы мой код не сломался из-за этого изменения идентификатора?

Всплывающее окно выглядит следующим образом, где X находится вверху справа, чтобы закрыть его: enter image description here

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Для идентификаторов c динамиков: вы можете сопоставить подстроку вместо точной строки. Используйте ниже XPath:

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

OR CSS:

div[id*="_window_close"]

Надеюсь, это поможет :)

1 голос
/ 05 мая 2020

Используйте атрибут 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()

Или используйте содержит с идентификатором

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