使用 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_xpath
或find_element_by_css_selector
。
尝试通过 Xpath 查找元素,例如:
driver.find_element(By.XPATH, '//button[text()="Some text"]')
要从浏览器中找到 xpath,只需右键单击网页中的某些内容,然后在右键单击后按检查,将出现一个菜单,导航到复制,然后会出现另一个菜单,按复制完整路径。
检查这个 https://selenium-python.readthedocs.io/locating-elements.html
我正在尝试 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_xpath
或find_element_by_css_selector
。
尝试通过 Xpath 查找元素,例如:
driver.find_element(By.XPATH, '//button[text()="Some text"]') 要从浏览器中找到 xpath,只需右键单击网页中的某些内容,然后在右键单击后按检查,将出现一个菜单,导航到复制,然后会出现另一个菜单,按复制完整路径。 检查这个 https://selenium-python.readthedocs.io/locating-elements.html