Автоматизировать вход с помощью Selenium и Python - PullRequest
0 голосов
/ 06 февраля 2019

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

Сначала, чтобы получить нужные значения, я открыл веб-страницу принтеров в Chrome и щелкнул правой кнопкой мыши «просмотр источника страницы» - это оказалось бесполезным.Отсюда я вижу только кучу <script> тегов, которые вызывают некоторые скрипты .js.Я предполагаю, что это большая часть моей проблемы.

Далее я выбрал опцию «осмотреть» после щелчка правой кнопкой мыши.Отсюда я вижу фактический загруженный HTML-код.Я зашел на сайт и записал процесс в Chrome.Благодаря этому я смог идентифицировать переменные, которые содержат имя пользователя и пароль.Я перешел к этой части HTML, щелкнул правой кнопкой мыши и скопировал Xpath.Затем я попытался использовать Selenium find_element_by_xpath, но все равно не повезло.Я пробовал все другие методы (найти по идентификатору и имени), однако он возвращает ошибку, что элемент не найден.

Я чувствую, что здесь есть нечто фундаментальное, чего я не понимаю.Кто-нибудь имеет опыт работы с этим ???

Примечание: я использую Python 3.7 и Selenium, однако я не против того, чтобы попробовать что-то кроме Selenium, если есть более изящный способ сделать это.

Мой код выглядит примерно так:

РЕДАКТИРОВАТЬ Вот мой обновленный код - я могу подтвердить, что это не просто проблема времени / ожидания.Мне удалось успешно схватить первые два внешних элемента, но второй, я иду глубже, это ошибки.

def sel_test():
    chromeOptions = Options()
    chromeOptions.add_experimental_option("useAutomationExtension", False)
    browser = webdriver.Chrome(chrome_options=chromeOptions)
    url = 'http://<ip address>/'
    browser.get(url)
    try:
        element = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="ccrx-root"]')))

    finally: browser.quit()

Элемент, который я хочу, похоронен в этом теге - может быть, это как-то связано с этим?Может быть связано с этим постом

<frame name="wlmframe" src="../startwlm/Start_Wlm.htm?arg11=">

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Как уже упоминалось в этом посте , вы можете работать только с текущим кадром, который виден.Вы должны сказать селену переключать кадры, чтобы получить доступ к дочерним кадрам.

Например: browser.switch_to.frame('wlmframe')

Затем будет загружен вложенный контент, чтобы вы могли получить доступ к дочерним элементам

0 голосов
/ 06 февраля 2019

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

Попробуйте сделать следующее:

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

delay = 3 # seconds
try:
    elementUsername = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.xpath, 'element-xpath')))

    element.send_keys('your username')

except TimeoutException:
    print("Loading took too much time!")

Вы можете узнать больше об этом здесь

...