#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.