如何获得Selenium点击位置的视觉指示



我正在尝试根据最近的帖子对Facebook上的帖子进行排序。当我点击";新活动";driver.find_element_by_xpath("//*[contains(text(), 'New activity')]").click()它的行为如预期,打开一个下拉框。当我试图点击";首先参见最近的帖子";,它抛出一个"不可迭代的错误"。我相信它的父元素是可点击的元素,所以我尝试点击它。driver.find_element_by_xpath("//*[contains(text(), 'See most recent posts first')]").find_element_by_xpath('..').click()这就像我点击了网页的另一个部分。我很想有一个关于Selenium点击位置的视觉提示来帮助调试这个问题。如果有人对解决这个问题的其他方法提出建议,我会非常高兴。

设置代码:

driver = webdriver.Chrome()        
# Use this code to create your own cookie file:
# driver.get("https://www.facebook.com")
# time.sleep(60)
# pickle.dump(driver.get_cookies() ,open("cookies.pkl","wb"))

# Login using cookies bucs Facebooks login system is a pain to navigate in html. (Presumably to discourage
# bots like me.)
driver.get("https://www.facebook.com/groups/backstagetheatrejobs/")
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:
driver.add_cookie(cookie)
driver.get("https://www.facebook.com/groups/backstagetheatrejobs/")
time.sleep(1)
driver.find_element_by_xpath("//*[contains(text(), 'New activity')]").click()
driver.find_element_by_xpath("//*[contains(text(), 'See most recent posts first')]").find_element_by_xpath('..').click()

而不是这个:

driver.find_element_by_xpath("//*[contains(text(), 'New activity')]").click()
driver.find_element_by_xpath("//*[contains(text(), 'See most recent posts first')]").find_element_by_xpath('..').click()

使用显式等待执行此操作:

driver.maximize_window()
wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), 'New activity')]"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), 'See most recent posts first')]"))).click()

进口:

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

或者,如果你只是想获取视觉坐标,你可以这样做:

wait = WebDriverWait(driver, 10)
new_activity_web_element = wait.until(EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), 'New activity')]")))
y_relative_coord = new_activity_web_element.location['y']
x_absolute_coord = new_activity_web_element.location['x']

最新更新