Тайм-аут при попытке переключиться на iframe с Selenium для Python - PullRequest
0 голосов
/ 27 июня 2018

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

WebDriverWait(driver, 10).until()

и через 10 секунд будет просто тайм-аут. Я предполагаю, что это никогда не распознает iframe, и я уверен, что это должно быть, потому что я заставляю его искать это неправильно. Вот HTML-код:

<div class="indeed-apply-popup" tabindex="0" id="indeed-ia-1530049657884-0-modal" style="position: absolute; left: 216px; top: 80px;"><div class="indeed-apply-container" id="indeedapply-modal-preload-container" style="height: 572px; width: 540px;"><div class="indeed-apply-branding" id="indeedapply-modal-preload-branding"></div><div class="indeed-apply-bd" id="indeedapply-modal-preload-bd"><iframe name="indeedapply-modal-preload-iframe" id="indeedapply-modal-preload-iframe" scrolling="no" frameborder="0" src="https://apply.indeed.com/indeedapply/xpc?v=5#%7B%22cn%22:%22onESpqgxSb%22,%22ppu%22:%22https://www.indeed.com/robots.txt%22,%22lpu%22:%22https://apply.indeed.com/robots.txt%22,%22setupms%22:1530049660417,%22preload%22:true,%22iaUid%22:%221cgv11tjq1b2b0o4%22,%22parentURL%22:%22https://www.indeed.com/jobs?q=it&amp;l=252C%2520FL&amp;vjk=ff1572a95b1b84bf%22%7D" style="border: 0px; vertical-align: bottom; width: 100%; height: 100%;"></iframe></div></div></div>

всплывающее окно, содержащее iframe, имеет следующий HTML-код:

<div class="indeed-apply-popup" tabindex="0" id="indeed-ia-1530049657884-0-modal" style="position: absolute; left: 208px; top: 80px;"><div class="indeed-apply-container" id="indeedapply-modal-preload-container" style="height: 572px; width: 540px;"><div class="indeed-apply-branding" id="indeedapply-modal-preload-branding"></div><div class="indeed-apply-bd" id="indeedapply-modal-preload-bd">

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

for item in page_results:
    item.click()
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'indeed-apply-button-label'))
    )
    apply_button = driver.find_element_by_class_name('indeed-apply-button-label')
    WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CLASS_NAME, 'indeed-apply-button-label'))
    )
    apply_button.click()
    WebDriverWait(driver, 10).until(
        EC.frame_to_be_available_and_switch_to_it((By.NAME, 'indeedapply-modal-preload-iframe'))
    )
    WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//*[@id='form-action-continue']"))
    )

    continue_button = driver.find_element_by_id('form-action-continue')
    continue_button.click()

Но я получаю ошибку:

line 70, in <module>
EC.frame_to_be_available_and_switch_to_it((By.NAME, "indeedapply-modal-preload-iframe"))
line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

Я пытался самостоятельно использовать driver.switch_to.frame () после и до WebDriverWait, но ничего не получилось. Даже если я укажу, что сообщение о тайм-ауте больше не отображается, следующее

continue_button

Не распознается, и тогда я получаю сообщение о том, что элемент не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...