Проблема с кликом по svg, selenium, python
не кликает по объекту svg, что я не пробовал код:
`from selenium import webdriver`
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
class weBot():
def __init__(self):
# from selenium import webdriver
# import time
# from selenium.webdriver.common.by import By
self.driver = webdriver.Chrome()
def init(self, log, passwor):
self.driver.get("https://oskelly.ru/")
self.driver.maximize_window()
time.sleep(5)
# but1 = self.driver.find_element(By.XPATH, '//svg[@class="osk-icon osk-icon_size-l osk-header-top-actions__link"]//use[@href="#profile"]/..')
# but1.click()
element1 = self.driver.find_element(By.CSS_SELECTOR, "svg use[href='#profile']")
element1.click()
but2 = self.driver.find_element(By.CSS_SELECTOR, "button.osk-button.osk-button_color-secondary.osk-button_size-m")
but2.click()
mail = self.driver.find_element(By.CLASS_NAME, "osk-input__input")
mail.send_keys(log)
passw = self.driver.find_element(By.CSS_SELECTOR, "input.osk-input__input[type='password']")
passw.send_keys(passwor)
but3 = self.driver.find_element(By.CSS_SELECTOR, "button.osk-button_color-primary.osk-button_size-m")
but3.click()
def otziv(self, url):
time.sleep(5000)
self.driver.get(url)
elements = self.driver.find_elements(By.CLASS_NAME, 'catalog-product-item')
elements[0].click()
return "отзыв сделан"
`wB = weBot()`
сайт https://oskelly.ru помогите пожалуйста
Ответы (1 шт):
Автор решения: Кимерченко
→ Ссылка
Ты жмёшь по <use href="#profile">, а это не интерактивный элемент. Браузер по умолчанию не реагирует на клики по <use>, Selenium тем более. Клик уходит в никуда.
Жать надо на родителя - чаще всего это <svg>, но правильнее кликать по кнопке или ссылке, в которую завернут SVG.
И не надо time.sleep(5) - это костыль. Лучше ждать, пока элемент станет кликабельным.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get("https://oskelly.ru")
driver.maximize_window()
# способ 1 - нажать на кнопку входа в шапке
profile_btn = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "button.osk-header-top-actions__link"))
)
profile_btn.click()
# способ 2 - найти use и кликнуть по ближайшему родителю
svg_use = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, "svg use[href='#profile']"))
)
driver.execute_script("arguments[0].closest('a,button').click()", svg_use)
driver.quit()
p.s: time.sleep(5000) - это не 5 секунд, а почти 1.5 часа.
Без driver.quit() Chrome будет висеть в процессах.