Это код:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
s=Service("C:\selenium driver\chromedriver.exe")
driver = webdriver.Chrome(service=s)
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
driver.implicitly_wait(5)
submit_button = driver.find_element(By.CLASS_NAME, "btn btn-outline-primary mt-3")
submit_button.click()
Это ошибка:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".btn btn-outline-primary mt-3"}
(Session info: chrome=109.0.5414.120)
btn btn-outline-primary mt-3
-- Поскольку между словами имени класса есть пробелы, он не может найти элемент.
Вместо этого попробуйте использовать XPath:
submit_button = driver.find_element(By.XPATH, "//*[@class='btn btn-outline-primary mt-3']")
Вы пытаетесь найти элемент по имени класса,
(By.CLASS_NAME, "btn btn-outline-primary mt-3")
но в синтаксисе селектора CSS на самом деле предусмотрено 3 имени класса: «btn», «btn-outline-primary» и «mt-3».
Чтобы найти этот элемент, переключите его на селектор CSS. Каждый класс в селекторе CSS начинается с «.», например. .btn
driver.find_element(By.CSS_SELECTOR, ".btn.btn-outline-primary.mt-3").click()
Вы также можете протестировать свои локаторы в консоли разработчика. Нажмите F12, чтобы открыть его, и введите $$(locator)
для селектора CSS или $x(locator)
для XPath. Селектор CSS выше будет $$(".btn.btn-outline-primary.mt-3")
, и он возвращает один элемент. Если вы развернете возврат и наведете на него курсор, он выделит элемент на странице, соответствующий этому локатору. Это правильная кнопка, поэтому мы знаем, что она работает и находит нужный нам элемент.