JavaScript работает на консоли Chrome, но не работает в Firefox или Selen-коде - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь автоматизировать вход на следующую страницу, используя селен: https://services.cal -online.co.il / Держатели карт / SCREENS / AccountManagement / Login.aspx? ReturnUrl =% 2fcard-holders% 2fScreens% 2fAccountManagement% 2fHomePage.aspx

Попытка найти элементы имени пользователя и пароля с помощью идентификатора, селектора CSS и xpath не сработала.

self._web_driver.find_element_by_xpath('//*[@id="txt-login-username"]')
self._web_driver.find_element_by_id("txt-login-password")
self._web_driver.find_element_by_css_selector('#txt-login-username')

Для всех трех Iget NoSuchElement исключение

Я пробовал следующий JS-скрипт: document.getElementById('txt-login-username'), когда я запускаю этот скрипт в selenium или в Firefox, он возвращает Null, но когда я запускаю его в консоли Chrome, я получаю результат, который могу использовать. Есть ли способ заставить его работать из кода Python или запустить его на самой консоли Chrome, а не из Python execute_script?

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Для автоматизации входа на страницу с использованием Selenium , так как требуемые элементы находятся в пределах <iframe>, поэтому вам необходимо:

  • Induce WebDriverWait для желаемого кадра, доступного и переключения на него .
  • Индуцирование WebDriverWait для желаемого элемента, который можно нажимать .
  • Можно использовать следующее решение:

    • Кодовый блок:

      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
      
      options = webdriver.ChromeOptions()
      options.add_argument("start-maximized")
      driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
      driver.get("https://services.cal-online.co.il/Card-Holders/SCREENS/AccountManagement/Login.aspx?ReturnUrl=%2fcard-holders%2fScreens%2fAccountManagement%2fHomePage.aspx")
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='calconnectIframe']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='txt-login-username']"))).send_keys("ariel6653")
      driver.find_element_by_xpath("//input[@id='txt-login-password']").send_keys("ariel6653")
      

Снимок браузера:

cal-online

Здесь вы можете найти соответствующее обсуждение Способы работы с #document вiframe

0 голосов
/ 31 октября 2019

нашел решение проблемы. проблема действительно заключалась в том, что объект находится внутри iframe. Я попытался использовать решение, предложенное в Получить элемент из iFrame

, но получил ошибку безопасности. решение состоит в том, чтобы переключить кадр следующим образом: driver.switch_to.frame("iframe"), и теперь вы можете использовать обычный поиск найти элемент

...