Python Selenium не может найти ни одного элемента на веб-странице - PullRequest
0 голосов
/ 20 марта 2020

Я хочу автоматизировать простую задачу с селеном. Вход на сайт: https://www.lernsax.de/. Я пытаюсь найти элемент через xpath, но это совсем не работает, и я получаю NoSuchElementException. Я использую Chromedriver, и я пытался использовать различные методы определения местоположения, такие как

find_element_by_id find_element_by_name find_element_by_xpath find_element_by_link_text find_element_by_partial_link_text find_element_by_tag_name find_element_by_class_name

, но я всегда получаю эту ошибку. Я уже пробовал разные сайты, и он отлично работает с xpath.

Любая помощь будет много значить!

Вот мой полный код:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome(executable_path="C:\chromedriver\chromedriver.exe")
driver.get("https://lernsax.de")
loginbtn = driver.find_element_by_xpath('//*[@id="skeleton_main"]/div[1]/div[2]/div/a')
loginbtn.click()
time.sleep(2)
driver.quit()

и полное сообщение об ошибке:

    Traceback (most recent call last):
  File "C:/Users/.../lernsax.py", line 6, in <module>
    loginbtn = driver.find_element_by_xpath('//*[@id="skeleton_main"]/div[1]/div[2]/div/a')
  File "C:\Users\...\PycharmProjects\LernsaxAutomation\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "C:\Users\...\PycharmProjects\LernsaxAutomation\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\Users\...\PycharmProjects\LernsaxAutomation\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\...\PycharmProjects\LernsaxAutomation\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="skeleton_main"]/div[1]/div[2]/div/a"}
  (Session info: chrome=80.0.3987.149)

Ответы [ 3 ]

2 голосов
/ 20 марта 2020

Похоже, что форма входа в систему содержится в iframe, в который вам нужно будет переключиться и выполнить необходимые операции. Добавьте ниже, прежде чем нажать на кнопку входа.

driver.switch_to.frame('main_frame')
2 голосов
/ 20 марта 2020

На странице присутствует iframe , поэтому вам необходимо сначала переключить драйвер на iframe и включить элемент:

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


driver = webdriver.Chrome()
driver.get("https://lernsax.de")
# Switch to iframe
driver.switch_to.frame(driver.find_element_by_id('main_frame'))
# Find the element by applying explicit wait on it and then click on it
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//*[@id='skeleton_main']/div[1]/div[2]/div/a"))).click()
0 голосов
/ 20 марта 2020

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

  • Ввести WebDriverWait для требуемого frame_to_be_available_and_switch_to_it() .
  • Индуцируйте WebDriverWait для нужного element_to_be_clickable().
  • Вы можете использовать любой из следующих Стратегий локатора :

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

      driver.get('https://www.lernsax.de/wws/9.php#/wws/101505.php?sid=97608267430324706358471707170230S5c89c6aa')
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#content-frame")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[data-qa='reporting-filter-trigger-toggle'][data-ember-action]"))).click()
      
    • Использование XPATH:

      driver.get('https://www.lernsax.de/wws/9.php#/wws/101505.php?sid=97608267430324706358471707170230S5c89c6aa')
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='main_frame']")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='mo' and text()='Login']"))).click()
      
    • Примечание : необходимо добавить следующие операции импорта:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
  • Снимок браузера:

LernSax


Ссылка

Вы можете найти множество соответствующих обсуждений в:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...