首页 > 解决方案 > Python/Selenium 按钮单击类不起作用

问题描述

<fieldset class = "A">
  ::before
    <button class = "ButtonA" type ="submit">
  ::before
     Click Me
  </button>
   ::after
</fieldset>

我正在尝试打开一个页面并单击页面上的一个按钮。但是,无论我调用什么函数,它都会抛出相同的消息,告诉我的类不存在,但是,我很肯定它确实存在。我没有看到它嵌套在 iFrame 中。那么我在这里不明白什么,如果我正在寻找一个 html 类,为什么它会为 css 选择器引发错误。

我收到以下错误

File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 564, in find_element_by_class_name
    return self.find_element(by=By.CLASS_NAME, value=name)`

File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, { `

File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)`

File "C:\Python38\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response`
    
raise exception_class(message, screen, stacktrace)selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".ButtonA"}`

driver.get("https://www.websiteWithButton.com")

#ensure html is loaded
driver.implicitly_wait(10)

#check for iFrame
#driver.switch_to.frame('PossibleiFrame')

#ButtonA is a a class that exists, I'm positive.
button = driver.find_element_by_class_name('ButtonA')
button.click()

标签: pythonhtmlselenium

解决方案


我只是给出我的整个解决方案。根据你的步骤

driver.get("https://www.websiteWithButton.com")

#ensure html is loaded
driver.implicitly_wait(10)

#check for iFrame
#driver.switch_to.frame('PossibleiFrame')

#ButtonA is a a class that exists, I'm positive.
button_list = driver.find_elements_by_tag('button')
for i, x in enumerate(button_list):
    print(f'Index: {i}')
    x.click()    # you can find the index of ButtonA you want by click them step by step

得到indexButtonA,直接点击即可
button_list[index].click()。反映在页面源中的位置
,只要页面源不变,就可以访问。 这可能不是一个聪明的方法,但至少你可以找到你想要的按钮元素,只要你在正确的页面中。indexButtonA


推荐阅读