首页 > 解决方案 > 找不到按类名 selenium 的按钮

问题描述

我正在尝试登录https://ok.ru/

我无法通过 css 选择器或 classname 找到按钮。我想点击按钮

在此处输入图像描述

我的代码返回错误

消息:没有这样的元素:无法找到元素:{"method":"css selector","selector":".button-pro __wide"}

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
    
driver = webdriver.Chrome(executable_path='chromedriver')
    
def login(email, password):
    driver.get(BASE_URL)
    driver.find_element_by_id('field_email').send_keys(email)
    driver.find_element_by_id('field_password').send_keys(password)
    driver.find_element_by_class_name('button-pro __wide').click()

login(email, password)

调试细节

<ipython-input-19-30d48e0af276> in login(email, password)
      6     driver.find_element_by_id('field_email').send_keys(email)
      7     driver.find_element_by_id('field_password').send_keys(password)
----> 8     driver.find_element_by_css_selector('button-pro __wide.button-pro __wide').click()
      9 
     10 login(email, password)

~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py in find_element_by_css_selector(self, css_selector)
    596             element = driver.find_element_by_css_selector('#foo')
    597         """
--> 598         return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
    599 
    600     def find_elements_by_css_selector(self, css_selector):

~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py in find_element(self, by, value)
    976         return self.execute(Command.FIND_ELEMENT, {
    977             'using': by,
--> 978             'value': value})['value']
    979 
    980     def find_elements(self, by=By.ID, value=None):

~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py in execute(self, driver_command, params)
    319         response = self.command_executor.execute(driver_command, params)
    320         if response:
--> 321             self.error_handler.check_response(response)
    322             response['value'] = self._unwrap_value(
    323                 response.get('value', None))

~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response)
    240                 alert_text = value['alert'].get('text')
    241             raise exception_class(message, screen, stacktrace, alert_text)
--> 242         raise exception_class(message, screen, stacktrace)
    243 
    244     def _value_or_default(self, obj, key, default):

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"button-pro __wide.button-pro __wide"}
  (Session info: chrome=85.0.4183.102)

PS 我知道我可以使用 xpath,但我需要使用相同类名或 id 等的可靠方法

标签: pythonselenium

解决方案


推荐阅读