нажатие кнопки автоматически в python селен - PullRequest
0 голосов
/ 31 марта 2020

Гэс, я встречаю что-то очень странное. Вскоре у меня есть программа, которая автоматически покупает обувь с разных аккаунтов: https://brandshop.ru/new/. Итак, мне нужно войти на этот сайт, я нахожу поля электронной почты и пароль и отправляю им ключи, НО что-то не так с кнопкой, когда я пытаюсь нажать кнопку «Отправить».

test.txt:

stackover@gmail.com: qazwsxed c

secondstackover@gmail.com: qazwsxed c

Мой код:

from selenium import webdriver

from selenium.webdriver.common.by import By

import time

def login(email, password):

    url = 'https://brandshop.ru/new/'

    driver = webdriver.Chrome('./chromedriver') # connecting driver

    driver.get(url)

    driver.find_element_by_class_name('user').click()  # class = 'user' 

    time.sleep(1.5) ##

    driver.find_element_by_name('email').send_keys(email)  # from file

    time.sleep(2) ##

    driver.find_element_by_name('password').send_keys(password) # from file

    driver.find_element(By.XPATH, '//button[text()="Вход"]').click() #PROBLEM HERE

    time.sleep(8)

    driver.close()

accs = open('test.txt')

for i in range(0, 2):

    string = accs.readline()

    string = string.split(':')

    email = string[0]

    password = string[1]

    login(email, password)

Если я комментирую driver.find_element (By.XPATH, '// button [text () = "Вход"]'). Click () для первой кнопки учетной записи нажимает независимо и на втором аккаунте ничего не происходит.

Если я раскомментирую driver.find_element (By.XPATH, '// button [text () = "Вход"]'). click () для первого нажатия кнопки аккаунта и Программа завершается с ошибкой:

   File "C:\PYTHON38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
    'value': value})['value']
    self.error_handler.check_response(response)

  File "C:\PYTHON38\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":"//button[text()="Вход"]"}

  (Session info: chrome=80.0.3987.149)

1 Ответ

0 голосов
/ 31 марта 2020

Добавить WebDriverWait, попробуйте следующий код:

def login(email, password):
    driver.get('https://brandshop.ru/new/')
    driver.maximize_window()
    btn_user = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='nav-right']//div[last()]")))
    btn_user.click()

    txt_email = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, "email")))
    txt_email.send_keys(email)

    txt_password = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, "password")))
    txt_password.send_keys(password)

    btn_login = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='nav-right']//button")))
    btn_login.click()

После импорта:

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