NoSuchFrameException (frame_reference) в селене - PullRequest
1 голос
/ 12 февраля 2020

Вот исключение, которое я получаю:

Traceback (most recent call last):
  File "/home/navendu/lead-generator/python_scripts/tempCodeRunnerFile.py", line 12, in <module>
    driver.switch_to_frame("http://103.251.43.139/~ksebuser/orumabills/upload/billview/")
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 789, in switch_to_frame
    self._switch_to.frame(frame_reference)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/switch_to.py", line 87, in frame
    raise NoSuchFrameException(frame_reference)
selenium.common.exceptions.NoSuchFrameException: Message: http://103.251.43.139/~ksebuser/orumabills/upload/billview/

Вот код python, который я запускаю:

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")
driver.maximize_window()
driver.implicitly_wait(7)
driver.switch_to_frame("http://103.251.43.139/~ksebuser/orumabills/upload/billview/")

ele = driver.find_element_by_id('t_consumer-no_5')
ele.send_keys("some text")

Вот ссылка на веб-страницу , Я пытаюсь автоматизировать заполнение формы на этом сайте http://www.kseb.in/index.php?option=com_wrapper&view=wrapper&Itemid=813&lang=en

Ответы [ 4 ]

0 голосов
/ 12 февраля 2020

Это сообщение об ошибке ...

selenium.common.exceptions.NoSuchFrameException: Message: http://103.251.43.139/~ksebuser/orumabills/upload/billview/

... означает, что ChromeDriver не смог найти нужный элемент <iframe>.


Кажется, вы были довольно близко. У <iframe> атрибут sr c установлен как http://103.251.43.139/~ksebuser/orumabills/upload/billview/. Поэтому упоминание атрибута sr c решило бы вашу проблему.

Однако, поскольку требуемый элемент находится в пределах <iframe>, отправьте последовательность символов * 1020. * в элементе вы должны:

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

    • Использование XPATH с атрибутом ср c:

      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("Navendu_Pottekkat")
      
    • Использование CSS_SELECTOR с ср c атрибут:

      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.CSS_SELECTOR,"iframe[src$='ksebuser/orumabills/upload/billview/']")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.userInputText"))).send_keys("Navendu_Pottekkat")
      
  • Снимок браузера:

Consumer


Ссылка

Вы можете найти пару соответствующих обсуждений в:

0 голосов
/ 12 февраля 2020

Фрейм не является URL.

Вы можете щелкнуть правой кнопкой мыши на странице, чтобы проверить, есть ли фрейм. Он покажет «View Frame Source». enter image description here

И найдите идентификатор / имя / индекс фрейма.

enter image description here

driver.switch_to_frame("blockrandom") # frame id

Ссылка: https://www.techbeamers.com/switch-between-iframes-selenium-python/

0 голосов
/ 12 февраля 2020

Вы пытаетесь переключиться с помощью атрибута src, однако switch_to_frame получает id или name атрибутов или WebElement в качестве параметра. Вам также следует заменить sleep() на WebDriverWait

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec

wait = WebDriverWait(driver, 10)
wait.until(ec.frame_to_be_available_and_switch_to_it('blockrandom'))
0 голосов
/ 12 февраля 2020

Попробуйте использовать атрибут name или id для переключения. Можно попробовать driver.switch_to_frame("iframe") или driver.switch_to_frame("blockrandom")

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