Я пытаюсь нажать кнопку внутри метки боковой панели:
<span class = "sidebar-label">
Exportar Listagem
</span>
Вот мой код:
driver.get("https://ispot2.faturaiqos.pt")
html = driver.page_source
exp = driver.find_element_by_link_text("Exportar Listagem")
exp.click()
Вот ошибка, которую я получаю:
Traceback (most recent call last):
File "/home/pi/Desktop/Python Testes/Ispot JP.py", line 25, in <module>
exp = driver.find_element_by_link_text("Exportar Listagem")
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 317, in find_element_by_link_text
return self.find_element(by=By.LINK_TEXT, value=link_text)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 745, in find_element
{'using': by, 'value': value})['value']
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"Exportar Listagem"}
(Session info: chrome=84.0.4147.141)
(Driver info: chromedriver=84.0.4147.141 (80c974bf7990b9735a8e885046fc5c9b1da4796c-refs/branch-heads/4147@{#1132}),platform=Linux 5.4.79-v7+ armv7l)
Чтобы щелкнуть элемент с текстом как Exportar Listagem, вы можете использовать следующие стратегии поиска:
Используя xpath и contains()
:
driver.find_element_by_xpath("//span[@class='sidebar-label' and contains(., 'Exportar Listagem')]").click()
Используя xpath и normalize-space()
:
driver.find_element_by_xpath("//span[@class='sidebar-label' and normalize-space()='Exportar Listagem']").click()
В идеале, чтобы щелкнуть элемент, вам нужно вызвать WebDriverWait для element_to_be_clickable()
, и вы можете использовать одну из следующих стратегий локатора:
Используя xpath и contains()
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='sidebar-label' and contains(., 'Exportar Listagem')]"))).click()
Используя xpath и normalize-space()
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='sidebar-label' and normalize-space()='Exportar Listagem']"))).click()
Примечание. Вы должны добавить следующие импорты:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
@PeterPan Похоже, это совсем другой вопрос. Можете ли вы задать новый вопрос в соответствии с вашим новым требованием, пожалуйста? Участники Stackoverflow будут рады вам помочь.
Отлично :), мой следующий вопрос: я попал на эту страницу «Exportar Listagem», и теперь мне нужно заполнить 2 формы даты, прежде чем нажимать кнопку «Exportar». Дата из <input data-v-412102b4 = "" type = "text " placeholder = "2020-11-12" class = "w-full form-control form-input form-input-bordered flatpickr-input active" name = "From"> Date To <input data-v-412102b4 = "" type = "text" placeholder = "2020-12-12" class = "w-full form-control form-input form-input-bordered flatpickr-input" name = "To"> Нажмите кнопку: <span class = "" >Экспортировать</span>