Как нажать на элемент с текстом как ЛОГИН согласно веб-сайту через Selenium и Python? - PullRequest
0 голосов
/ 25 августа 2018

Windows 10Home x64 / Python 3.7.0 win64 / Селен 3.14.0 / Geckodriver 3.14.0 / Firefox 61.0.2.

Я пытаюсь нажать кнопку входа в систему, хотя я скопировал и вставил полный XPath, я не могу нажать кнопку входа в систему.

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('https://library.yonsei.ac.kr/')
linkElem = driver.find_element_by_link_text('LOGIN').click() 
username = driver.find_element_by_id('id')
username.send_keys('myuserAbc')
password = driver.find_element_by_id('password')
password.send_keys('mypass123')
linkElem = driver.find_element_by_xpath("/html/body/div[2]/div[2]/div/div[2]/form/fieldset/div[2]/p[@class='loginBtn']/input[@type='submit']").click()

Спасибо за вашу помощь.

Update1: скрипт работает до момента локализации кнопки входа, у меня нет проблем с Marionette или с последней версией Firefox.

Обновление 2: я добавил p[@class='loginBtn']/input[@type='submit'], чтобы сделать его более конкретным, но все еще не работает.

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

В соответствии с HTML, которым вы поделились, чтобы вызвать click() для элемента с текстом LOGIN , вам нужно заставить WebDriverWait , чтобы желаемый элемент был кликабельным , и вы можете использовать одно из следующих решений:

  • CSS_SELECTOR:

    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[title='Login']>span"))).click()
    
  • XPATH

    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a[@title='Login']/span"))).click()
    

Примечание : Вы должны добавить следующий импорт:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
0 голосов
/ 25 августа 2018

По своему опыту я обнаружил, что нажатие кнопки может не работать несколько раз на кнопках формы с типом, установленным на действие.Наилучший способ работы с этим способом - использовать метод submit ().

, поэтому что-то подобное должно работать в вашей форме входа в систему

from time import sleep
time.sleep(20) 
driver.find_element_by_class_name('loginBtn').submit()

Это отправит формусервер, и вы сможете пройти через процесс входа в систему.

, если это не сработает, вы также можете попробовать следующее

driver.find_element_by_class_name('loginBtn).send_keys(Keys.ENTER)

Теперь, почему Button.click();не работает здесь может быть по следующим причинам.

1. Кнопка видна, но не активирована.

2. Драйвер находит 2 экземпляра элемента Button

.Подробнее обсуждениеОб этом можно узнать здесь Selenium: submit () работает нормально, но click () не

...