Как найти Xpath элемента в соответствии с HTML через Selenium и Python

1

Изображение 174551

Пробовал что-то вроде этого в python, я не могу нажать на крест, используя Selenium.

driver.find_element_by_xpath("//span[contains(@onclick, 'parent.$WZRK_WR.closeIframe('60005','intentPreview');')]").click()
Теги:
xpath
selenium
selenium-webdriver
webdriver

6 ответов

2
Лучший ответ

В соответствии с HTML, который вы поделили, щелкните по элементу, изображенному как X, сначала вам нужно вызвать WebDriverWait при переключении на <iframe> и снова вызвать WebDriverWait для того, чтобы желаемый элемент был доступен для кликабеля, и вы можете использовать следующее решение:

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='wiz-iframe-intent']")))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='CT_Interstitial']//span[@class='CT_InterstitialClose']"))).click()

Примечание. Необходимо добавить следующие импорты:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
  • 0
    wiz-iframe-intent это видно на скриншоте, которым поделились OP?
  • 0
    @cruisepandey Грубый идентификатор кадра в значительной степени виден.
Показать ещё 2 комментария
2

Вы имеете дело с iframe. Выполните следующие шаги:

  1. Вам нужно переключить управление на iframe.

  2. Затем выполните свое действие (в этом случае нажмите "Закрыть").

  3. Переключите управление обратно в рамку по умолчанию.

2
  1. Откройте ссылку ниже и нажмите кнопку "Добавить в Chrome".

Xpath Helper- https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl?hl=ru

  1. После добавления плагина в Chrome. Откройте приложение/веб-страницу и нажмите SHIFT + CTRL + X. Черное окно появится сверху, тогда вы можете играть с xpath.

Если xpath - invalid-, вы получите ошибку xpath, и если совпадений не будет найдено, то отобразится NULL.

Note- Чтобы проверить атрибут элемента, вы можете использовать F12, который является ничем иным, как элементом проверки по умолчанию для всех браузеров, затем проверьте атрибут и создайте свой собственный xpath и попробуйте.

Xpath Syntax//tagname[@attribute-name=value1′] tagname /tagname[@attribute-name=value1′] и если вы не уверены в имени тега, не беспокойтесь, вы можете попробовать * также

//*[@attribute-name='value1']
1

Попробуйте использовать этот xPath:

//div[@id = 'contentDiv']/div/div/span[@class = 'CT_InterstitialClose']

Код:

close_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@id = 'contentDiv']/div/div/span[@class = 'CT_InterstitialClose']")))
close_btn.click()

Импорт:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

Объяснение:

WebDriverWait используется, чтобы ждать, пока элемент будет доступен для клика, и только затем щелкнет по нему. В этом примере WebDriverWait будет ждать не менее 10 секунд, пока элемент не будет доступен для клика.

PS: как я вижу на скриншоте, ваш элемент, вероятно, находится в iframe. Это означает, что вам нужно сначала переключиться на этот iframe, чтобы иметь возможность взаимодействовать с элементами в нем. Пример кода для него будет следующим:

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "XPATH_TO_FRAME")))
# do stuff
close_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@id = 'contentDiv']/div/div/span[@class = 'CT_InterstitialClose']")))
close_btn.click()
# switch back to default content
driver.switch_to.default_content()
1

Вы можете попробовать с помощью этого css_selector:

div.CT_InterstitialContents+span.CT_InterstitialClose[onclick]  

Xpath будет:

//div[@class='CT_InterstitialContents']/following-sibling::span[@class='CT_InterstitialClose' and onclick]
0

Вы можете написать xpath, используя имя класса span. Пожалуйста, обратитесь к приведенному ниже примеру.

//span[@class='amountCharged']

Ещё вопросы

Сообщество Overcoder
Наверх
Меню