提问人:Justin 提问时间:11/5/2023 最后编辑:YaroslavmJustin 更新时间:11/5/2023 访问量:36
如何使用 Selenium 在 Wordpress 管理面板中单击菜单元素
How to click menu element in Wordpress admin panel using Selenium
问:
我在做什么:
我的同事给我发了视频,我必须为每个非主页导入 8 个块。早些时候我正在研究硒,我想我可以自动化吗?
我尝试过用于登录 wordpress 的代码。然后我想通过导入博客来自动编辑 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: ; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
2.) 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: ; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
答:
0赞
Yaroslavm
11/5/2023
#1
管理面板包含用于小型浏览器分辨率和最大化窗口的元素。
首先,没有带有 class 的元素,但是有带有当前 class 的元素。span
[class="ab-item"]
a
要点击你的元素,你需要按可见性过滤你的元素,因为第一个元素是在移动视图中可见的元素,如果你尝试点击它,它将不可见,所以不可交互。
elements = WebDriverWait(browser, 20).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'a[class="ab-item"]')))
[element for element in elements if element.is_displayed()][0].click()
评论