使用 Selenium 更新 facebook post:错误 - 未找到元素,但我可以在浏览器中找到

Updating facebook post using Selenium: error- element not found but i can find in my browser

我正在尝试 post 在 facebook 墙上使用 python 中的硒。我可以登录,但登录后找不到 class 我从浏览器复制的状态框名称

这是我的代码-

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

user_name = "email"
password = "password" 
msg = "hi i am new here"

driver = webdriver.Firefox()

driver.get("https://www.facebook.com")
element = driver.find_element_by_id("email")
element.send_keys(user_name)
element = driver.find_element_by_id("pass")
element.send_keys(password)
element.send_keys(Keys.RETURN)
time.sleep(5)

post_box = driver.find_element_by_class_name("a8c37x1j ni8dbmo4 stjgntxs l9j0dhe7")
post_box.click()
time.sleep(5)    
post_box.send_keys(msg)

我从浏览器复制的代码快照作为图像附加here

这是我收到的错误-

Traceback (most recent call last):
  File "C:/Users/rosha/Desktop/facebook bot.py", line 17, in <module>
    post_box = driver.find_element_by_class_name("a8c37x1j ni8dbmo4 stjgntxs l9j0dhe7")
  File "C:\ProgramData\Anaconda3\envs\facebook bot.py\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:\ProgramData\Anaconda3\envs\facebook bot.py\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\ProgramData\Anaconda3\envs\facebook bot.py\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\ProgramData\Anaconda3\envs\facebook bot.py\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: .a8c37x1j ni8dbmo4 stjgntxs l9j0dhe7

问题是 driver.find_element_by_class_name() 可以用于一个 class,而不是多个 class,因为你有:a8c37x1j ni8dbmo4 stjgntxs l9j0dhe7 是多个 class 用空格分隔。

参考解决方案,建议使用find_elements_by_xpathfind_element_by_css_selector

尝试通过 Xpath 查找元素,例如:

driver.find_element(By.XPATH, '//button[text()="Some text"]') 要从浏览器中找到 xpath,只需右键单击网页中的某些内容,然后在右键单击后按检查,将出现一个菜单,导航到复制,然后会出现另一个菜单,按复制完整路径。 检查这个 https://selenium-python.readthedocs.io/locating-elements.html