Python, не может найти элемент с именем класса - PullRequest
0 голосов
/ 03 января 2019

Во-первых, я абсолютный новичок в этом, пытался найти элемент на веб-странице (lg.telin.co.id/lgnew/cacti.php), этот элемент имеет точное имя, когда я писал код, который является "login_username". Тем не менее, я получил сообщение «Невозможно найти элемент» до сих пор. Также эта веб-страница не имеет идентификатора

Я использовал find_element_by_name, но пока ничего не работает

from selenium import webdriver

browser=webdriver.Firefox(executable_path="C:\\Program Files (x86)\\Python37-32\\BrowserDriver\\geckodriver.exe")
browser.get("https://lg.telin.co.id/lgnew/cacti.php")

usernameStr = '123456'

username = browser.find_element_by_xpath("/input[@name='login_username']")

username.send_keys(usernameStr)

если код работает, текст будет заполнен символами, которые я предполагаю

Ответы [ 2 ]

0 голосов
/ 03 января 2019

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

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

    • Использование CSS_SELECTOR:

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[name='cacti']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='login_username']"))).click()
      
    • Использование XPATH:

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@name='cacti']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='login_username']"))).click()
      
  • Примечание : Вы должны добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Здесь вы можете найти соответствующее обсуждение Способы решения #документ под iframe

0 голосов
/ 03 января 2019

Попробуйте переключиться на iframe перед обработкой полей ввода формы:

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

browser.switch_to.frame('cacti')

username = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.NAME, 'login_username')))
username.send_keys(usernameStr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...