как нажать кнопку, которая находится внутри iframe, используя python selenium
Он мой образец сниппета. Я хочу нажать кнопку-1034-btnIconEl, используя python selenium.
<html>
<body>
<div class="x-container x-border-item x-box-item x-container-default x-layout-fit" id="iframes" >
<iframe ></iframe>
<iframe class="x-component x-fit-item x-component-default" frameborder="0" id="rpIFrame-1239">
<html>
<body>
<div> .....many divs
<div>
<a><span><span id="button-1034-btnIconEl"></span></span></a>
</div>
</div>
</body>
</html>
</iframe>
я пробовал это
driver.switch_to.frame(1)
driver.find_element(By.XPATH, "//span[contains(@id,'button-1034-btnIconEl')]").click()
но получение
"NoSuchElementException: такого элемента нет:"
Пожалуйста, помогите мне пройти через это.
3 ответа
Используйте рамку id
вместо индекса
driver.switch_to.frame('rpIFrame-1239')
Чтобы включить iframe, вы можете использовать:
driver.switch_to.frame(driver.find_element_by_tag_name('iframe'))
Чтобы click()
на кнопку с идентификатором в виде кнопки-1034-btnIconEl как искомый элемент находится в пределах<iframe>
поэтому вам нужно:
- Вызвать WebDriverWait, чтобы нужный фрейм стал доступен, и переключиться на него.
- Заставьте WebDriverWait сделать кликабельным по желаемому элементу.
Вы можете использовать любую из следующих стратегий локатора:
С помощью
CSS_SELECTOR
:WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.x-component.x-fit-item.x-component-default[id^='rpIFrame-']"))) WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a > span > span[id^='button'][id$='btnIconEl']"))).click()
С помощью
XPATH
:WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='x-component x-fit-item x-component-default' and starts-with(@id, 'rpIFrame-')]"))) WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a/span/span[starts-with(@id, 'button') and contains(@id, 'btnIconEl')]"))).click()
Здесь вы можете найти соответствующую дискуссию о способах работы с #document в iframe.