Python 3 Selenium 如何通过XPath查找此元素?

2024-09-30 14:34:14 发布

您现在位置:Python中文网/ 问答频道 /正文

https://www.facebook.com/friends/requests/?fcref=jwl&outgoing=1

我想点击“发送的朋友请求”中的“查看更多请求”

^{pr2}$

我用了这个代码,但它不起作用。在

driver.find_element_by_xpath("//*[contains(@id, 'outgoing_reqs_pager')]").click()

我得到了一个错误:

Message: Element is not clickable at point (371.5, 23.166671752929688). Other element would receive the click:

<input aria-owns="js_8" class="_1frb" name="q" value="" autocomplete="off" placeholder="Search Facebook" role="combobox" aria-label="Search" aria-autocomplete="list" aria-expanded="false" aria-controls="js_5" aria-haspopup="true" type="text">

如何点击?谢谢:)


Tags: httpscomsearchfacebookwwwjselementrequests
1条回答
网友
1楼 · 发布于 2024-09-30 14:34:14

实际上,这里使用的是部分id匹配来定位元素,所以这个xpath可能不是唯一的,并且返回多个元素。在

find_element总是通过匹配定位器返回第一个元素,可能是它返回了其他元素而不是desire元素覆盖的其他元素,这就是您遇到麻烦的原因。在

在这里,您应该尝试使用link_text来定位desire元素,方法是使用它们的文本,如下所示:

driver.find_element_by_link_text("See More Requests").click()

或使用partial_link_text如下:

^{pr2}$

编辑1:-如果您仍然得到相同的异常,您需要首先使用exexute_script()滚动到该元素,然后单击如下所示:

link = driver.find_element_by_partial_link_text("See More Requests")

#now scroll to reach this link
driver.exexute_script("arguments[0].scrollIntoView()", link)

#now click on this link 
 link.click()

或者,如果您不想滚动,可以使用exexute_script单击而不滚动,如下所示:

link = driver.find_element_by_partial_link_text("See More Requests")

#now perform click using javascript
driver.exexute_script("arguments[0].click()", link)

编辑2:-如果要在while循环中单击此链接直到它出现,则需要实现WebDriverWait以等待它下次出现,如下所示:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)

# now find link
link = wait.until(EC.presence_of_element_located((By.LINK_TEXT, "See More Requests")))

#now perform click one of these above using java_script

相关问题 更多 >