Селен: не могу найти элемент

1

Я пытаюсь переключиться на кадр, но Selenium не может найти элемент. Вот код HTML, который я получаю с Selenium, прежде чем найти:

<div class="jqmPopOverlay" style="height: 100%; width: 100%; position: fixed; left: 0px; top: 0px; z-index: 2999; opacity: 0.7;"></div><div class="login login-main jqmID1" id="loginForm" style="z-index: 3000; top: 0px; left: 319.5px; display: block;">
<div class="titlebar">
<a class="close" href="#" tabindex="7">✕</a>
</div>
<div class="tooltipstered" id="loginFrame"><iframe frameborder="0" id="easyXDM_default127_provider" name="easyXDM_default127_provider" scrolling="no" style="height: 509.667px;" width="100%"></iframe></div>
</div>
<script async="" defer="" type="text/javascript">undefined</script><script async="" src="//www.googleadservices.com/pagead/conversion_async.js" type="text/javascript"></script><script async="" src="https://www.google-analytics.com/plugins/ua/ec.js" type="text/javascript"></script><script async="" src="https://www.google-analytics.com/analytics.js" type="text/javascript"></script><script async="" src="//www.googletagmanager.com/gtm.js?id=GTM-4DBM"></script><script type="text/javascript">     

Вот код Python:

browser = webdriver.Chrome('chromedriver.exe') 
browser.get(url)
frame = browser.find_element_by_id("easyXDM_default6255_provider")
browser.switch_to_frame(frame)

Вот ошибка:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"easyXDM_default6255_provider"}
  (Session info: chrome=67.0.3396.99)
  (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 10.0.17134 x86_64)

Как видите, в HTML есть элемент, но он не может быть расположен. Что я делаю неправильно?

  • 0
    Это, вероятно, потому что элемент еще не загружен на странице
  • 0
    Вы ищете кадр по идентификатору "easyXDM_default6255_provider", но если вы проверите свой HTML, там нет элемента с этим идентификатором .... посмотрите мой ответ: stackoverflow.com/questions/21350605/…
Показать ещё 2 комментария
Теги:
selenium
iframe

1 ответ

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

Попробуй это:

browser = webdriver.Chrome('chromedriver.exe') 
browser.get(url)
WebDriverWait(browser, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//*[@id = 'loginFrame']/iframe")))

Примечание: вам нужно добавить некоторые импортные товары:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

Во-первых, ваш кадр, вероятно, имеет общий идентификатор и имя. Вот почему я предложил другой селектор. Во-вторых, я добавил WebDriverWait, который ждет не менее 10 секунд, пока кадр не будет доступен и только затем переключится на него.

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

browser.switch_to.default_content()

иначе вы не сможете взаимодействовать со всей DOM.

Ещё вопросы

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