Как нажать на эту кнопку с помощью веб-драйвера? - PullRequest
0 голосов
/ 25 апреля 2019

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

driver.find_element_by_xpath("//button[text()='Vérifier Maintenant']").click()
<a href="https://www.majilan-sev.com/finalization&amp;token=a2PrzORvYmkxM0BmbGFzaG1haWwuY28=" target="_blank">
<button style="position: relative;
  display: inline-block;
  padding: 7px 12px;
  border-radius: 4px;
  cursor: pointer;
  font-family: 'Roboto', Arial, sans-serif;
  transition: all .2s;
  font-weight: bold;
  text-transform: uppercase;
  background-color: #3498DB;
  color: white;
  letter-spacing: .2px;
  border: none !important;
  outline: none !important;"type="button"
name="button">Vérifier Maintenant</button>
</a>

Вот ошибка, которую я получил:

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    driver.find_element_by_xpath("//button[text()='Vérifier Maintenant']").click()
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
    'value': value})['value']
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//button[text()='V\xe9rifier Maintenant']"}
  (Session info: chrome=73.0.3683.103)
  (Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Windows NT 6.3.9600 x86_64)

Ответы [ 3 ]

1 голос
/ 25 апреля 2019

Попробуйте этот селектор.

//button[contains(text(),'rifier Maintenant')]

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

0 голосов
/ 26 апреля 2019

Если имя вашей кнопки уникально, то этого xpath будет достаточно:

//button[@name='button']

в противном случае вы можете использовать это:

//button[@name='button' and contains(text(),'rifier Maintenant')]
0 голосов
/ 25 апреля 2019

После документации по селену их пример выглядит так:

username = driver.find_element_by_xpath("//input[@name='username']")

Так что я представляю, что в вашей ситуации это будет выглядеть так:

driver.find_element_by_xpath("//button[@name='button']").click()

Поскольку имя"button" и тип также является <button> HTML-элементом.Я полагаю, что вы путаете другой метод поиска по тексту ссылки.В частности

driver.find_element_by_link_text('some link text')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...