Как нажать на элемент согласно HTML, предоставленному через selenium-webdriver и Python - PullRequest
0 голосов
/ 11 сентября 2018

Здравствуйте. Я попытался щелкнуть переключатель с помощью драйвера селена в python, и он не работает.Это HTML-код:

<input aria-flowto="aria8" aria-label="private key" type="radio" ng-model="walletType" value="pasteprivkey" class="ng-pristine ng-valid ng-empty ng-touched" name="200">

Это моя строка кода:

browser.find_elements_by_xpath("input[type='radio'][value='pasteprivkey']").click()

И я получаю эту ошибку:

DevTools listening on ws://127.0.0.1:52666/devtools/browser/da96711c-0446-c01-a90d-0f722691ec4c
Traceback (most recent call last):
  File "C:\Users\Andrei\Desktop\py\teste.py", line 6, in <module>
    browser.find_element_by_xpath("//*[@type='radio'][@value='pasteprivkey']").click()
  File "C:\Users\Andrei\AppData\Local\Programs\Python\Python37\lib\site-packages
\selenium\webdriver\remote\webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)
  File "C:\Users\Andrei\AppData\Local\Programs\Python\Python37\lib\site-packages
\selenium\webdriver\remote\webelement.py", line 628, in _execute
    return self._parent.execute(command, params)
  File "C:\Users\Andrei\AppData\Local\Programs\Python\Python37\lib\site-packages
\selenium\webdriver\remote\webdriver.py", line 320, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Andrei\AppData\Local\Programs\Python\Python37\lib\site-packages
\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
  (Session info: chrome=68.0.3440.106)
  (Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),platform=Windows NT 6.1.7601 SP1 x86_64)

Кто-то может помочь мне, пожалуйста?Я также попытался скопировать xpath с элементом inspect, и я получил странную вещь:

/html/body/section[1]/div[1]/main/article[1]/div[2]/wallet-decrypt-drtv/article/section[1]/label[9]/input

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

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

  • CSS_SELECTOR:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.ng-pristine.ng-valid.ng-empty.ng-touched[ng-model='walletType'][value='pasteprivkey']"))).click()
    
  • XPATH

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='ng-pristine ng-valid ng-empty ng-touched' and @ng-model='walletType'][@value='pasteprivkey']"))).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 голосов
/ 11 сентября 2018

Сообщение об ошибке указывает на то, что элемент не виден.

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

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

  • Поймите шаги, которые будут отображать элемент, и выполните те, что в вашем скрипте
  • Найдите другой элемент, с которым следует взаимодействовать
  • Используйте Javascript для выполнения клика (примечание. Я не рекомендую это, если вы используете Selenium для тестирования)

Наконец;

Я также попытался скопировать xpath с элементом inspect, и я получил странную вещь

Это XPath, предложенный вашим браузером. Следует помнить, что XPath не является окончательной вещью; элемент может быть найден многими, многими XPath. Некоторые из этих XPath будут хорошими, некоторые - плохими. Выбор наиболее подходящего XPath - это то, что требует опыта и знаний в области автоматизации, и, как вы видели, этого очень трудно достичь с помощью инструментов.

...