Пробовал что-то вроде этого в python, я не могу нажать на крест, используя Selenium.
driver.find_element_by_xpath("//span[contains(@onclick, 'parent.$WZRK_WR.closeIframe('60005','intentPreview');')]").click()
В соответствии с 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
Вы имеете дело с iframe. Выполните следующие шаги:
Вам нужно переключить управление на iframe.
Затем выполните свое действие (в этом случае нажмите "Закрыть").
Переключите управление обратно в рамку по умолчанию.
Xpath Helper- https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl?hl=ru
Если xpath - invalid-, вы получите ошибку xpath, и если совпадений не будет найдено, то отобразится NULL.
Note- Чтобы проверить атрибут элемента, вы можете использовать F12, который является ничем иным, как элементом проверки по умолчанию для всех браузеров, затем проверьте атрибут и создайте свой собственный xpath и попробуйте.
Xpath Syntax//tagname[@attribute-name=value1′]
tagname /tagname[@attribute-name=value1′]
и если вы не уверены в имени тега, не беспокойтесь, вы можете попробовать * также
//*[@attribute-name='value1']
Попробуйте использовать этот 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()
Вы можете попробовать с помощью этого css_selector:
div.CT_InterstitialContents+span.CT_InterstitialClose[onclick]
Xpath будет:
//div[@class='CT_InterstitialContents']/following-sibling::span[@class='CT_InterstitialClose' and onclick]
Вы можете написать xpath, используя имя класса span. Пожалуйста, обратитесь к приведенному ниже примеру.
//span[@class='amountCharged']
wiz-iframe-intent
это видно на скриншоте, которым поделились OP?