Arhn - архитектура программирования

Невозможно найти элемент: при нажатии кнопки через Selenium и Python

Я хочу нажать кнопку (событие), используя Selenium на Python, и код кнопки:

   <input id="workbenchLst:j_id_id509" name="workbenchLst:j_id_id509" onclick="A4J.AJAX.Submit('workbenchLst',event,{'similarityGroupingId':'workbenchLst:j_id_id509','parameters':{'ajaxSingle':'workbenchLst:j_id_id509','workbenchLst:j_id_id509':'workbenchLst:j_id_id509'} ,'containerId':'j_id_id1'} );return false;" value="Add" type="button" autocomplete="off">

Мой код:

driver.find_element_by_id("workbenchLst:j_id_id509").click()#add

и это не работает, ошибка:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="workbenchLst:j_id_id509"]

  • @tuomastik При редактировании вопросов не добавляйте <blockquotes> в журналы трассировки ошибок. Выполнение такой отладки становится трудным, поскольку сообщения об ошибках в трассировке стека ошибок получают перенос слов. 04.02.2019

Ответы:


1

Сначала проверьте iframe / фрейм на своей странице, если есть фрейм / iframe, вам нужно сначала переключить фрейм, как показано ниже:

driver.switch_to_frame(driver.find_element_by_id("iframeid"));

Вы можете попробовать щелкнуть элемент, используя XPath ниже:

element = driver.find_element_by_xpath("//input[contains(@id, 'workbenchLst') and @value='Add']");
element.click();

Или вы можете попробовать использовать JavaScript Executor, как показано ниже:

element = driver.find_element_by_xpath("//input[contains(@id, 'workbenchLst') and @value='Add']");
driver.execute_script("arguments[0].click();", element);

Все еще не работает, попробуйте дать некоторую задержку, импортируйте сон из времени, как показано ниже:

from time import sleep
driver.switch_to_frame(driver.find_element_by_id("iframeid"));
sleep(5);
element = driver.find_element_by_xpath("(//input[contains(@id, 'workbenchLst') and @value='Add'])[2]");
element.click();

Надеюсь это работает...

04.02.2019
  • Комментарии не подлежат расширенному обсуждению; этот разговор был перешел в чат. 04.02.2019

  • 2

    Требуемый элемент - это динамический элемент, поэтому для поиска элемента необходимо вызвать WebDriverWait, чтобы элемент стал интерактивным, и вы можете использовать любое из следующих решений:

    • Использование CSS_SELECTOR:

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[id^='workbenchLst:'][name^='workbenchLst:'][value='Add']"))).click()
      
    • Использование XPATH:

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[starts-with(@id,'workbenchLst:') and starts-with(@name,'workbenchLst:')][@value='Add']"))).click()
      
    • Примечание. Вам необходимо добавить следующий импорт:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
    04.02.2019
  • получение этой ошибки как в Xpath, так и в css_selector вызывает исключение TimeoutException (сообщение, экран, stacktrace) selenium.common.exceptions.TimeoutException: Сообщение: 04.02.2019
  • @Steve TimeoutException является результатом неудачного ожидаемых условий. Отлаживайте свой код с помощью find_element_by_* вместе с time.sleep(). Если вы можете найти элемент, обновите вопрос наблюдениями. 04.02.2019
  • Я не понял, пожалуйста, обратите внимание, я новичок. 04.02.2019
  • Посмотрите это обсуждение stackoverflow.com/questions/47993443/ Проверьте наличие тегов <iframe> / <frame> в HTML. 04.02.2019
  • Это внутри div, но не внутри iframe, до сих пор не понял. 04.02.2019
  • @Steve Можете ли вы проверить HTML и подтвердить, идентифицирует ли xpath или css желаемый элемент? 04.02.2019
  • Я все еще не понимал, как это сделать, было бы здорово, если бы вы могли отредактировать свой код, чтобы добавить этот раздел 04.02.2019
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..