Ошибка: ElementNotInteractableException в Selenium Python

У меня проблема с поиском WebElement в Selenium. Я попытался заполнить поле ввода, это html:

<div class = "container">
            <div class = "tp-fl" id = "btnSearchStockAutoComplete">
                <span class = "tp-icon tp-search tp-co-3 "></span>
            </div>
            <angucomplete placeholder = "search" searchfields = "Not Found" pause = "400" set-focus = "tpFocus" selectedobject = "tpSelected" titlefield = "label" inputclass = "form-control form-control-small" matchclass = "highlight" api = "tpApi" disable = "disableSearchBox" stockdetails = "stockdetails" class = "ng-isolate-scope">
                <div class = "tp-re angucomplete-holder tp-width">
                    <div id = "fulltextContainer" style = "display: none" class = "symbol-info tp-etc">
                    </div>
                    <input id = "txt_search" class = "search-box tp-co-1 tp-pa-rl-5 tp-re tp-bo-bo" type = "text" placeholder = "Search" onmouseup = "this.select();" autocomplete = "off">
                    <div id = "auto-list-container" class = "auto-list-container tp-bg-2 tp-co-1 tp-bo-4 tp-bo tp-width angucomplete-dropdown" style = "min-width: 250px; display: none">
                        <div style = "display: none" id = "loading" class = "tp-h-35 tp-pa-rl-10 angucomplete-searching">Searching ...</div>
                        <div style = "display: none" id = "norecord" class = "tp-35 tp-pa-rl-10 angucomplete-searching">Not Found </div>
                        <div id = "list_dropdown">
                        </div>
                    </div>
                </div>
            </angucomplete>
        </div>

это мой код на питоне:

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

    browser=webdriver.Chrome('path')
    inputTxt=browser.find_element_by_xpath('//*[@id = "txt_search"]')
    inputTxt.send_keys('stock')

но когда я запускаю эту программу, она выдает мне ошибку и выдает исключение "selenium.common.exceptions.ElementNotInteractableException: Message: element not interactableException", мне было интересно, есть ли какое-либо возможное решение этой проблемы.

Вам нужно взаимодействовать со страницей, чтобы активировать текстовое поле поиска? Ошибка предполагает, что элемент существует, но не является «взаимодействующим».

orde 28.06.2019 17:00

Я хочу заполнить элемент ввода, как я уже упоминал, я использовал метод send_keys(), но он выдает это исключение. На самой веб-странице элемент ввода является интерактивным, и я могу написать в нем любой текст.

Hamed1987 28.06.2019 17:15

Есть ли более одного элемента с этим идентификатором? Может быть более одного, где первый не тот, который вам нужен.

JeffC 28.06.2019 18:07

попробуйте inputTxt.location_once_scrolled_into_view, который будет прокручивать элемент в поле зрения. Тогда попробуйте send_keys.

supputuri 28.06.2019 19:24

@JeffC спасибо за вашу помощь, я проверил исходный код страницы и нашел три других элемента с точно таким же идентификатором, но в разных разделах с разными идентификаторами и классами. Теперь я должен попытаться сосредоточиться на одном из них, но проблема в том, как я могу определить для него настоящий css-селектор. Я использовал inputTxt=browser.find_element_by_css_selector('app-content#t‌​xt_search') (поле ввода, которое я хочу с id='txt_search', находится внутри тега содержимого приложения), но оно выдает NoSuchElementException, я не понимаю, какой правильный стиль для доступа к этому элементу?

Hamed1987 28.06.2019 21:27

Когда вы пишете селектор CSS app-content#txt_search, это означает, что HTML похож на <app-content id='txt_search'>...</app-content>. Соединение вместе без промежутка между ними означает, что все они являются частью одного и того же элемента. Вам нужно либо app-content > #txt_search (> указывает на дочерний элемент), либо app-content #txt_search (<пробел> указывает на потомка). Из HTML-кода, опубликованного в вашем вопросе, я предполагаю, что вам нужно место, потому что я не вижу родительского тега <app-content>.

JeffC 28.06.2019 22:19

Попробуйте использовать этот xpath //div[@id = "btnSearchStockAutoComplete"]/parent::div[@class = "‌​container"]//input[@‌​id = "txt_search"].. потому что трудно найти этот элемент однозначно, используя cssSelector, если есть несколько элементов с одинаковым id.

Saurabh Gaur 28.06.2019 22:26

@JeffC Большое спасибо за вашу помощь, я использовал пространство между элементами, и у меня это сработало отлично.

Hamed1987 29.06.2019 11:44

Здорово. Я разместил свой комментарий как ответ, так как он решил вашу проблему.

JeffC 29.06.2019 22:00
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
10
231
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы пишете селектор CSS app-content#txt_search, это означает, что HTML похож на <app-content id='txt_search'>...</app-content>. Соединение вместе без промежутка между ними означает, что все они являются частью одного и того же элемента. Вам нужно либо app-content > #txt_search (> указывает на ребенка), либо app-content #txt_search (указывает на потомка). Из HTML-кода, опубликованного в вашем вопросе, я предполагаю, что вам нужно место, потому что я не вижу родительского тега <app-content>.

Другие вопросы по теме