Arhlit - информационные технологии

Попытка выбрать поле для имени пользователя и пароля с помощью Selenium в Python

Я пытаюсь понять, как выбрать идентификатор на веб-сайте с именем пользователя и паролем, используя селен, чтобы я мог войти в систему с помощью скрипта python. Проблема в том, что поля на веб-сайте, похоже, не имеют идентификаторов для полей имени пользователя и пароля в HTML-коде, и я не совсем уверен, как получить нужные мне поля.

from selenium import webdriver
import time
#from selenium.webdriver.common.keys import Keys

link = "https://logistics.vendini.com/"
login = "e-mail"
password = "pass"

chromedriver = "D:\Downloads\chromedriver"
driver = webdriver.Chrome(chromedriver)
driver.get(link)

username = driver.find_element_by_class_name('form-control')
print(username)

Я попробовал это просто, чтобы посмотреть, сработает ли поиск по классу, но все, что я получаю, это открытие веб-страницы, а затем я получаю эту ошибку

DevTools listening on ws://127.0.0.1:64343/devtools/browser/8a74989c-0f07-442c-ba50-077d3ec005bc
Traceback (most recent call last):
  File "d:/marko/Programming/RavensHouseCup/webscrape.py", line 13, in <module>
    username = driver.find_element_by_class_name('form-control')
  File "D:\Program Files (x86)\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 564, in find_element_by_class_name
    return self.find_element(by=By.CLASS_NAME, value=name)
  File "D:\Program Files (x86)\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "D:\Program Files (x86)\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "D:\Program Files (x86)\Python\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":".form-control"}
  (Session info: chrome=79.0.3945.88)

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

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

    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "/html/body/div/div/div/div/div/form/div[1]/input"))
    )

username = driver.find_element_by_xpath("/html/body/div/div/div/div/div/form/div[1]/input")
password = driver.find_element_by_xpath("/html/body/div/div/div/div/div/form/div[2]/input")
username.send_keys(login)
password.send_keys(password)

Электронная почта вводится правильно, но пароль выдает мне сообщение об ошибке

File "d:/marko/Programming/RavensHouseCup/webscrape.py", line 24, in <module>
    password.send_keys(password)
  File "D:\Program Files (x86)\Python\lib\site-packages\selenium\webdriver\remote\webelement.py", line 478, in send_keys
    {'text': "".join(keys_to_typing(value)),
  File "D:\Program Files (x86)\Python\lib\site-packages\selenium\webdriver\common\utils.py", line 150, in keys_to_typing
    for i in range(len(val)):
TypeError: object of type 'WebElement' has no len()
30.12.2019

  • Чтобы добавить дополнительную информацию, я перешел к проверке элементов поля, которое я пытаюсь использовать, щелкнул его правой кнопкой мыши, скопировал XPath и попытался использовать эту строку username = driver.find_element_by_xpath(/html/body/div/ div/div/div/div/form/div[1]/input), и я все еще получаю сообщение об ошибке, очень похожее на предыдущее, selenium.common.exceptions.NoSuchElementException: Сообщение: нет такого элемента: Невозможно найти элемент: { method:xpath,selector:/html/body/div/div/div/div/div/form/div[1]/input} (информация о сеансе: chrome=79.0.3945.88) 30.12.2019

Ответы:


1

Когда страница загружается впервые, элемент отсутствует, появляется некоторый JS, который загружает форму. Вам нужно дождаться появления элемента

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

wait = WebDriverWait(driver, 10)
username = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'form-control')))
print(username)
30.12.2019
  • Хорошо, поэтому я на самом деле просто добавил неявное ожидание в 10 секунд, что, вероятно, не лучшее решение, поскольку, если оно когда-либо займет больше 10 секунд, оно не будет работать, но я просто хотел проверить это, и ему действительно удается ввести электронное письмо с помощью этот код driver.get(link) driver.implicitly_wait(10) username = driver.find_element_by_xpath(/html/body/div/div/div/div/div/form/div[1]/input) password = driver.find_element_by_xpath( /html/body/div/div/div/div/div/form/div[2]/input) username.send_keys(логин) password.send_keys(пароль) 30.12.2019

  • 2

    Я самый глупый кодер на свете. Я понял свою ошибку, у меня было 2 разные переменные, обе с именем пароля, извините всех, я дебил. Я изменил фактический пароль на веб-сайт на password2, и все работает!

    30.12.2019
    Новые материалы

    12 сайтов с искусственным интеллектом, которые поразят вас
    Приготовьтесь поразить воображение Сегодня существует несколько веб-сайтов, использующих искусственный интеллект (ИИ). От индивидуальных рекомендаций по новостям до более умных поисковых..

    Скрытый технический долг в системах машинного обучения [NeurIPS 2015]
    Что такое технический долг? Технический долг — это метафора, введенная Уордом Каннингемом в 1992 году, чтобы объяснить долгосрочные затраты, связанные с быстрым продвижением в разработке..

    Алгоритм быстрой сортировки в Python
    Всем привет, добро пожаловать на programminginpython.com . Здесь я покажу вам, как реализовать алгоритм быстрой сортировки в Python. В предыдущих статьях я рассмотрел Сортировку вставкой ,..

    Как использовать манипулирование объектами в JavaScript
    Объекты являются важным строительным блоком JavaScript. Они позволяют группировать свойства и методы вместе. Объект представляет собой набор свойств. Свойства идентифицируются с..

    Разработка игр с помощью Godot Engine: мощный инструмент с открытым исходным кодом
    Разработка игр — творческий и сложный процесс, требующий множества навыков и инструментов. Одним из наиболее важных инструментов является игровой движок, который представляет собой программную..

    От XML к аннотациям: переход к современной конфигурации Spring
    Введение Фреймворк Spring претерпел значительную эволюцию с момента своего создания. Одним из заметных изменений стал переход от конфигураций на основе XML к конфигурациям, управляемым..

    Я люблю Руби!
    Я люблю Руби! Мне это нравится по той же причине, по которой мне нравится программировать на Python. Он настолько интуитивно понятен, а встроенные методы упрощают решение проблем. Если вы..