Селен выпуск с i кадров - PullRequest
2 голосов
/ 13 февраля 2020

Введите номер потребителя и выберите регион, go на следующую страницу, загрузите PDF. Вот шаги, которые я пытаюсь автоматизировать.

Я пытаюсь загрузить файл PDF, который, кажется, встроен в iFrame, это правильный путь для этого:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get(
    "http://www.kseb.in/index.php?option=com_wrapper&view=wrapper&Itemid=813&lang=en")

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(
    (By.XPATH, "//iframe[contains(@src, 'ksebuser/orumabills/upload/billview/')]")))

WebDriverWait(driver, 10).until(EC.element_to_be_clickable(
    (By.XPATH, "//input[@class='userInputText']"))).send_keys("11230")

WebDriverWait(driver, 10).until(EC.element_to_be_clickable(
    (By.ID, "office"))).send_keys("adoor")

WebDriverWait(driver, 10).until(EC.element_to_be_clickable(
    (By.NAME, "b_submit_0"))).submit()

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(
    (By.XPATH, "//iframe[contains(@src, 'ksebuser/orumabills/upload/billview/bill_view_click.php')]")))
# print(driver.current_url)

# WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(
#     (By.XPATH, "//iframe[contains(@src, 'ksebuser/orumabills/upload/billview/bill_view_click.php')]")))

WebDriverWait(driver, 10).until(EC.element_to_be_clickable(
    (By.ID, "download"))).click()

Это не работает. Знаешь причину почему?

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Вы можете использовать XPath для поиска <iframe>:

iframe = driver.find_element_by_xpath("//iframe[contains(@src, 'ksebuser/orumabills/upload/billview/')]")

Затем switch_to the <iframe>:

driver.switch_to.frame(iframe)

Вот как переключиться обратно к содержимому по умолчанию (из <iframe>):

driver.switch_to.default_content()
1 голос
/ 13 февраля 2020

Вы должны использовать driver.switch_to.frame(iframe) для вмешательства в iframe.

Но не забудьте go вернуться, используя driver.switch_to.default_content().

, код ниже будет работать

driver = webdriver.Firefox()
driver.get('http://www.kseb.in/index.php?
            option=com_wrapper&view=wrapper&Itemid=813&lang=en')
iframe = driver.find_element_by_id("blockrandom")
driver.switch_to.frame(iframe)
s = Select(driver.find_element_by_id('office'))
s.select_by_value('5617')
driver.find_element_by_id('t_consumer-no_5').send_keys('11230')
driver.find_element_by_xpath('/html/body/form/table/tbody/tr[4]/td[3]/input').click()
driver.switch_to.default_content()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...