You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Selenium点击WordPress后台仅含类选择器的菜单元素

问题概述

需要用Selenium实现自动化流程,给WordPress后台的非主页导入8个Elementor区块,目前已完成登录代码,但无法定位并点击仅包含类标识的WordPress菜单。

当前代码

import time
from selenium import webdriver
from selenium.webdriver.safari.service import Service
#from selenium.webdriver.safari.options import SafariOptions
#from webdriver_manager.safari import SafariDriverManager

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC


#options = SafariOptions()
#options.add_experimental

browser = webdriver.Safari()

browser.get('http://akaska.hledampneu.cz/wp-admin')

time.sleep(1)
Passname = browser.find_element(By.ID,"user_login")
#Passname = browser.find_element(by=id("user_login"))
Passname.send_keys('admin.akaska')

Password = browser.find_element(By.ID, "user_pass")
Password.send_keys('tdYFxncD9gbd6Q)Y*2')

time.sleep(1)
submit = browser.find_element(By.ID,"wp-submit").click()

#submit = browser.find_element(By.CLASS_NAME,"icon-options")

time.sleep(1)

#submit = browser.find_element(By.ID,"wp-admin-bar-site-name")

submit = browser.find_element(By.CSS_SELECTOR, 'span[class="ab-item"]').click()

已尝试方案及报错

  1. CSS_SELECTOR定位
submit = browser.find_element(By.CSS_SELECTOR, 'span[class="ab-item"]').click()

报错:

Traceback (most recent call last):
  File "/Users/justin/Desktop/projects/wordpressAutomation /main.py", line 36, in <module>
    submit = browser.find_element(By.CSS_SELECTOR, 'span[class="ab-item"]').click()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 741, in find_element
    return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 347, in execute
    self.error_handler.check_response(response)
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/selenium/webdriver/remote/errorhandler.py", line 229, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: ; 找不到元素异常
  1. CLASS_NAME定位
submit = browser.find_element(By.CLASS_NAME,"ab-item").click()

报错:

Traceback (most recent call last):
  File "/Users/justin/Desktop/projects/wordpressAutomation /main.py", line 34, in <module>
    submit = browser.find_element(By.CLASS_NAME,"ab-item").click()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 741, in find_element
    return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 347, in execute
    self.error_handler.check_response(response)
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/selenium/webdriver/remote/errorhandler.py", line 229, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: ; 找不到元素异常

解决办法

出现找不到元素的问题,可从以下几个方向排查解决:

  • 替换固定等待为显式等待
    固定的time.sleep()无法保证元素加载完成,改用Selenium的显式等待,确保元素存在且可点击:
# 删除原来的time.sleep(1),替换为以下代码
WebDriverWait(browser, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, 'span.ab-item'))
).click()
  • 优化定位器精度
    ab-item类可能在页面中重复出现,结合父元素的唯一标识缩小范围,比如WordPress顶部导航的站点名称菜单:
WebDriverWait(browser, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, '#wp-admin-bar-site-name span.ab-item'))
).click()
  • 检查是否存在iframe嵌套
    如果菜单元素在iframe内,需要先切换到对应的iframe再定位:
# 替换为实际的iframe定位方式,比如id或class
iframe = browser.find_element(By.ID, '目标iframe的ID')
browser.switch_to.frame(iframe)
# 定位并点击元素
WebDriverWait(browser, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, 'span.ab-item'))
).click()
# 操作完成后切回主文档
browser.switch_to.default_content()
  • 使用JS强制点击
    若元素存在但因样式覆盖无法点击,可通过JavaScript强制触发点击:
element = WebDriverWait(browser, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, 'span.ab-item'))
)
browser.execute_script("arguments[0].click();", element)

内容的提问来源于stack exchange,提问作者Justin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 22:42:06