Авторизация на сайте через selenium python

Рейтинг: 1Ответов: 2Опубликовано: 14.05.2023

Пишу скрипт автоматизации регистрации серверов на beget.ru Не получается авторизоваться на главной странице

from seleniumwire import webdriver
from selenium_stealth import stealth
from selenium.webdriver.common.by import By

driver = webdriver.Chrome(executable_path=r"Chromedriver\chromedriver.exe",
                 options=options,
                 seleniumwire_options=options_proxy,
                )

stealth(driver,
        languages=["en-US", "en"],
        vendor="Google Inc.",
        platform="Win32",
        webgl_vendor="Intel Iris OpenGL Engine",
        fix_hairline=True
        )
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
     "source": """
          const newProto = navigator.__proto__
          delete newProto.webdriver
          navigator.__proto__ = newProto
          """
    })
try:
    driver.get(url=url)
    time.sleep(5)
    name = driver.find_element(By.XPATH, '//div/[class="input-icon input-icon-left icon-login mb-20"]')
    time.sleep(5)
    name.clear()
    name.send_keys('89188085879')
    # time.sleep(10)
except Exception as e:
    print(e)
finally:
    driver.close()
    driver.quit()

Блок на сайте такой:

<div class="input-icon input-icon-left icon-login mb-20">
<input type="text" st="input-login-login" placeholder="Логин" tabindex="1" class="form-control tooltipstered" data-v-tooltip="true" wfd-id="id0"><i></i><i class="icon-keyboard icon size-16 js_simple-keyboard" title="Экранная клавиатура"></i></div>

Что делаю не так? Как мне поймать это поле и авторизоваться ? Постоянно закрывается с ошибкой:

Message: invalid selector: Unable to locate an element with the xpath expression //div/[class="input-icon input-icon-left icon-login mb-20"] because of the following error:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//div/[class="input-icon input-icon-left icon-login mb-20"]' is not a valid XPath expression.
  (Session info: chrome=113.0.5672.93)
Stacktrace:
Backtrace:
    GetHandleVerifier [0x00496DF3+48691]
    (No symbol) [0x00428CC1]
    (No symbol) [0x00335068]
    (No symbol) [0x00338401]
    (No symbol) [0x00339641]
    (No symbol) [0x003396E0]
    (No symbol) [0x003600D0]
    (No symbol) [0x003606AB]
    (No symbol) [0x0038DD62]
    (No symbol) [0x0037A314]
    (No symbol) [0x0038C452]
    (No symbol) [0x0037A0C6]
    (No symbol) [0x00357E18]
    (No symbol) [0x00358F3D]
    GetHandleVerifier [0x006F4EAA+2531050]
    GetHandleVerifier [0x00734B60+2792352]
    GetHandleVerifier [0x0072E6EC+2766636]
    GetHandleVerifier [0x00520820+612448]
    (No symbol) [0x004325BC]
    (No symbol) [0x0042E808]
    (No symbol) [0x0042E8EB]
    (No symbol) [0x00421C77]
    BaseThreadInitThunk [0x7631FA29+25]
    RtlGetAppContainerNamedObjectPath [0x77B17A9E+286]
    RtlGetAppContainerNamedObjectPath [0x77B17A6E+238]

ошибки от разных методов и путей меняются, но смысл тот же постоянно. Очень прошу помощи.

Ответы

▲ 2Принят

Разберем вашу ошибку подробнее.

Ошибка Unable to locate an element with the xpath expression //div/[class="input-icon input-icon-left icon-login mb-20"] сообщает о том, что элемент не найден, поэтому вы не можете продвинуться далее в авторизации.

  1. Вы пытаетесь авторизоваться через главную страницу сайта - тем самым усложняя себе работу. Есть отдельная страница для авторизации https://cp.beget.com/login - авторизуйтесь через неё.
  2. Для страницы в пункте (1) я написал примерный код авторизации, попробуйте использовать его, скорректировав под себя:
driver.get("https://cp.beget.com/login")
login = driver.find_element(By.XPATH, '/html/body/div[3]/div/div[1]/main/div/div[2]/div/form/div[1]/div[1]/input')
login.clear()
login.send_keys('login')
password = driver.find_element(By.XPATH, '/html/body/div[3]/div/div[1]/main/div/div[2]/div/form/div[1]/div[2]/input')
password.clear()
password.send_keys('password')
button = driver.find_element(By.XPATH, '/html/body/div[3]/div/div[1]/main/div/div[2]/div/form/div[3]/button').click()
▲ 0

Спасибо Alez Programmer, за помощь. Этот варинат рабочий. Но 3 дня мучений не прошли даром, и всё оказалось куда проще:

    driver.get(url=url)
    time.sleep(5)
    login_field = driver.find_element(By.CLASS_NAME, "form-control")
    time.sleep(1)
    login_field.clear()
    login_field.send_keys(login)
    time.sleep(1)
    pass_field = driver.find_element(By.CSS_SELECTOR, "input[st='input-login-password']")
    time.sleep(1)
    pass_field.clear()
    pass_field.send_keys(password)
    driver.find_element(By.CLASS_NAME, "control-label").click()
    time.sleep(2)
    pass_field.send_keys(Keys.ENTER)

Как итог, всё получилось. Страница авторизации кстати была "https://cp.beget.com/mail/10666630" - это создание почты домена. Но я не знал, что лучше переходить на целевые страницы с авторизацией например.