Selenium Python — не может взаимодействовать / щелкать с JavaScript

#javascript #python-3.x #selenium #selenium-webdriver

#javascript #python-3.x #selenium #selenium-webdriver

Вопрос:

Проблема: не удается найти / щелкнуть / отправить.ключи к любому из элементов на определенной веб-странице.

WebDriver Chrome

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

Что я пробовал до сих пор после обширных исследований здесь:

1- Поскольку была открыта новая вкладка, я «принудительно» ввел код, просматривающий новую вкладку, используя driver.switch_to.window, и чтобы убедиться, что я напечатал текущий заголовок страницы, и он правильный.

2- Я пробовал как неявное, так и явное ожидание (даже time.sleep), чтобы дождаться загрузки страницы.

3- Исследование указало мне на iframe.. У меня нет iframe, но, тем не менее, я искал количество кадров (2) и переключался между обоими и пытался найти элементы, используя xpath (полный xpath), и ни один из них не был найден.

4- Развернуть окно.

Итак, я попробовал «все» в книгах. Проверяя элементы, с которыми мне нужно было взаимодействовать, я обнаружил, что каждый из них указывал на JS с некоторыми аргументами.

 href="JavaScript:SWESubmitForm(документ.SWEForm2_0, s_10, "s_2_1_96_0", "VRId-0") " tabindex ="2997" id ="s_2_1_96_0"> Отслеживать ошибки 

При дальнейшем поиске было обнаружено, что s_10 является переменной внутри скрипта, которая имеет разные параметры от s_0 до s_14.

var s_0 = {действие: "/esales_enu/start.swe", цель: "_sweview", SWECmd:"GotoView", SWEMethod:"GotoView", SWEView: "Просмотр ссылки на канал дорожки L2C BT", SWEApplet:"Апплет домашней страницы L2C New CZ BT", SWEReqRowId:"0", SWESP:"false", SWENeedContext:"true", SWEKeepContext:"0", SWEDIC:"false"};

var s_10 = {действие: "/esales_enu/start.swe", цель: "_sweview", SWECmd:"GotoView", SWEMethod:"GotoView", SWEView:"Новый вид поиска ошибок портала ИЛИ BT", SWEApplet:"Новый апплет домашней страницы L2C CZ BT", SWEReqRowId:"0", SWESP:"false", SWENeedContext:"true", SWEKeepContext:"0", SWEDIC:"false"};

Итак, я начал поиск и нашел driver.execute_script(), и я написал:

driver.execute_script("SWESubmitForm(document.SWEForm2_0,s_10,'s_2_1_96_0','VRId-0')")

Но это происходит:

selenium.common.исключения.JavascriptException: Сообщение: ошибка javascript: SWESubmitForm не определена 

Чего мне здесь не хватает? Синтаксис? Если кто-то может пролить некоторый свет на то, в каком направлении мне следует идти, это будет действительно оценено.

Спасибо.

Ответ №1:

Я смог это исправить и узнать несколько вещей. «Теория» JS, которую я принимал, не имела никакого смысла, поскольку driver.execute_script() используется не так, как я думал, а скорее вводит код или находит элементы.

Во-вторых, решение на самом деле было фреймами 🙂

Я был настолько сосредоточен на переключении между двумя фреймами, которые я нашел изначально, что ни на секунду не подумал, что ВНУТРИ этих двух фреймов могло быть больше фреймов!

И, по сути, это было так, после переключения на основной фрейм я снова переключился на 2-й фрейм внутри этого основного и смог найти его через xpath.