Selenium не может найти элемент (id) - PullRequest
0 голосов
/ 13 февраля 2020

ТАК Я пытаюсь сделать автоматизацию, которая входит в мою учетную запись. Это мой код рН:

    import selenium.webdriver as webdriver

def get_all_results(Username, password):
    url = "https://portail.sainteanne.ca/pluriportail/fr/MainExterne.srf?P=LoginReq"
    browser = webdriver.Chrome()
    browser.get(url)

    Username_sbox = browser.find_element_by_id("NomLogin")
    Username_sbox.send_keys(Username)
    Username_sbox.submit()

    Pass_sbox = browser.find_element_by_id("MotPasse")
    Pass_sbox.send_keys(password)
    Pass_sbox.submit()

    browser.close()

get_all_results("random_username123232", "random_password1234") 

И вот результат, который я получаю:

Traceback (most recent call last):
  File "c:\Users\CSA\OneDrive - College Sainte-Anne\Programming\PYTHON\Learning\WS\tempCodeRunnerFile.py", line 18, in <module>
    get_all_results("random_username123232", "random_password1234") 
  File "c:\Users\CSA\OneDrive - College Sainte-Anne\Programming\PYTHON\Learning\WS\tempCodeRunnerFile.py", line 8, in get_all_results
    Username_sbox = browser.find_element_by_id("NomLogin")
  File "C:\Users\CSA\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "C:\Users\CSA\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\Users\CSA\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\CSA\AppData\Local\Programs\Python\Python38-32\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":"css selector","selector":"[id="NomLogin"]"}
  (Session info: chrome=79.0.3945.130)**

Я только начал автоматизировать работу с браузерами, и я запутался. Пожалуйста, помогите. Спасибо :).

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Наконец-то я нашел способ разрешить загрузку браузера перед тем, как разрешить селену запускать любую функцию:

 import selenium.webdriver as webdriver

 url = "url.of.the.website.com"
 browser = webdriver.Chrome()
 browser.get(url)

 browser.implicitly_wait(10)  # <--- THIS IS THE FUNCTION I WAS LOOKING FOR

 #...Enter username.... blablabla and DONE!
0 голосов
/ 13 февраля 2020

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

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

Username_sbox = WebDriverWait(browser, 10).until(
        EC.presence_of_element_located((By.ID, "NomLogin"))

Pass_sbox = WebDriverWait(browser, 10).until(
        EC.presence_of_element_located((By.ID, "MotPasse"))

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

Более подробную информацию об ожиданиях можно найти здесь : https://selenium-python.readthedocs.io/waits.html

...