Почему моя selenium IDE работает хорошо, а та же команда python - нет?

У меня возникают проблемы с автоматизацией повторяющихся задач на веб-сайте моей компании во внутренней сети.

Хотя я могу правильно находить элементы на других веб-сайтах (щелкать, отправлять ключи и т. д.), Я не могу делать то же самое на этом веб-сайте (я всегда получаю ошибку «невозможно найти элемент с помощью xpath == ...»).

Я попытался записать их те же задачи с помощью Selenium IDE, и он работает хорошо.

Если я экспортирую тестовый пример Selenium IDE как код python и сравниваю команду xpath с моей, xpath будет таким же, и это то же самое, что я получаю с помощью селектора firefox до точки, которую я хочу щелкнуть.

Поскольку по другим причинам я должен работать с проводником (у меня есть веб-драйвер проводника и т. д.), Я не пробовал запускать код с помощью python + (веб-драйвер для Firefox).

Код:

from selenium import webdriver
import time
driver=webdriver.IE("D:\myfolder\IEDriverServer.exe")
driver.implicitly_wait(30)
base_url = "https://companywebsite.ext")
driver.get(base_url)    #it's ok until now, I can open the webpage
time.sleep(20)
element=driver.find_element_by_xpath("/html/body/div[2]/div/table/tbody/tr[3]")
time.sleep(10)

Вот мои вопросы:

1) Почему я могу делать что-то правильно на других сайтах, а не на этом?

2) Почему Selenium IDE может это делать и с теми же командами не работает с моим скриптом Python?

3) Нужно ли мне делать определенные настройки?

Большое тебе спасибо.

Сайт вашей компании написан на Angular? если это так, вы должны попробовать использовать wait for elements

Moshe Slavin 16.09.2018 11:32

Спасибо, Моше. Я думаю, что это написано не на Angular, потому что, если я ищу элементы angular в консоли браузера, я ничего не могу найти.

SynRel 16.09.2018 11:56

вы пробовали использовать драйвер IE для других сайтов?

Moshe Slavin 16.09.2018 11:59

Да, и работает хорошо. Я пробовал в Facebook, Linkedin и т. Д .: мне удалось щелкнуть ссылки или отправить ключи к формам. Вы хоть представляете, в чем может быть проблема?

SynRel 16.09.2018 12:04

Если я хочу подождать, что что-то произойдет на странице, как вы предлагали говорить об элементах angular, какие команды мне следует использовать? Достаточно ли для этого общей команды time.sleep?

SynRel 16.09.2018 13:40

более элегантный способ (лучшая практика) - использовать wait, вот документация: selenium-python.readthedocs.io/waits.html

Moshe Slavin 16.09.2018 13:53

в вашем xPath вы должны использовать более надежный путь, такой как селекторы id или CSS.

Moshe Slavin 16.09.2018 13:56

вы решили эту проблему? вы видели данные ответы?

Moshe Slavin 06.02.2019 17:11
Почему в 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
8
231
1

Ответы 1

Вам следует попробовать использовать wait:

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


driver=webdriver.IE("D:\myfolder\IEDriverServer.exe")
driver.implicitly_wait(30)
base_url = "https://companywebsite.ext")
driver.get(base_url)

wait = WebDriverWait(driver, 10)
element = wait.until(EC.visibility_of_element_located((By.XPATH, "/html/body/div[2]/div/table/tbody/tr[3]")))

Надеюсь это поможет!

Спасибо, правда, за помощь. Теперь трассировка изменилась в TimeoutException, как будто у него все еще есть проблемы с поиском элемента. Странно то, что selenium ide работает, и если вы экспортируете его как код Python, xpath будет таким же! Кстати, могу добавить инфу: на странице есть таблица, в которой строки соответствуют разным профилям; в HTML я нашел несколько команд «onclick»: они по одной для каждого профиля и выглядят как <tr onclick='document.forms.namedItem("a1").submit()'>. Как вы думаете, это может быть полезно для имитации щелчка мышью по одной из них?

SynRel 16.09.2018 15:35

да! можно добавить driver.execute_script("your JS to simulate clicking")

Moshe Slavin 16.09.2018 16:00

В этом случае я должен попробовать что-нибудь вроде: driver.execute_script("document.forms.namedItem("a1").submit‌​()")? Спасибо!

SynRel 16.09.2018 16:58

это должно работать! вы можете просто щелкать элементы, которые нужно щелкнуть ... селеном!

Moshe Slavin 16.09.2018 17:00

Большое спасибо, Моше. Я пробовал целый день, но все равно не работает. Кажется, что на этой странице что-то зашифровано, я не знаю: я не могу найти ничего с обычными командами. Более того, единственная команда onclick, которую я могу активировать, - это ссылка на домашнюю страницу ... Я слишком неопытен в js, может быть ... или, может быть, что-то скрыто.

SynRel 16.09.2018 17:30

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