Selenium:无法单击Facebook';它像按钮
我有一个帖子(生日愿望)的列表,我想把喜欢。Facebook只显示一个URL,所以我用Selenium打开它,向下滚动以显示帖子(单击“显示更多”div) 当我试图收集类似的按钮并单击它们时,我遇到了问题Selenium:无法单击Facebook';它像按钮,selenium,selenium-webdriver,web-scraping,Selenium,Selenium Webdriver,Web Scraping,我有一个帖子(生日愿望)的列表,我想把喜欢。Facebook只显示一个URL,所以我用Selenium打开它,向下滚动以显示帖子(单击“显示更多”div) 当我试图收集类似的按钮并单击它们时,我遇到了问题 from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.common.exceptions import TimeoutException from seleniu
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
usr = ""
pwd = ""
driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("url of birthday posts")
# or you can use Chrome(executable_path="/usr/bin/chromedriver")
assert "Facebook" in driver.title
elem = driver.find_element_by_id("email")
elem.send_keys(usr)
elem = driver.find_element_by_id("pass")
elem.send_keys(pwd)
elem.send_keys(Keys.RETURN)
while True:
try:
scroll = WebDriverWait(driver, 4).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='u_0_9']/li[6]/a")))
except TimeoutException:
break
scroll.click()
buttons = driver.find_elements_by_xpath("//a[text()='Mi piace']")
for element in buttons:
element.click()
它不会返回任何错误,但也不起作用!
如果我没有指向/input[1],而是更深入地指向带有“like”文本的a标记,它返回“element not clickable”。隐式等待无法解决此问题
下面是div的HTML,带有like按钮、注释等(可能更容易在Facebook上查看):
Mi piaceloveahahwhowswighgrrcommenticrovi联合国评论。。。
我不是编程方面的专家,我觉得我没有指出事件侦听器所在的正确xpath。我如何理解可点击xpath的指向(通常在DOM中,但也在这种形式中)?查找和点击按钮的解决方案是使用真正舒适的Selenium Javascript执行器注入Javascript:
driver.execute_script("var elems = document.getElementsByClassName('UFILikeLink _4x9- _4x9_ _48-k');for(var i= 0;i<elems.length;i++){elems[i].click();}");
driver.execute_脚本(“var elems=document.getElementsByClassName('UFILikeLink\u 4x9-\u 4x9\u 48-k”);对于Facebook上的(var i=0;iLike)按钮,可以提取如下:
driver.find_elements(By.CSS_SELECTOR, ".UFILikeLink._4x9-._4x9_._48-k")
为了避免不喜欢已经喜欢的帖子,您可以使用:
for x in range(0,len(like)):
liked = like[x].get_attribute("data-testid")
if liked == "fb-ufi-likelink":
like[x].click()
我还尝试了:buttons=driver.find_elements_by_xpath(“/*[@class='commentable\u item']]/div[1]”)作为buttons:driver.execute_脚本(“document.getElementsByClassName('commentable\u item').submit()”),但javascript返回的“document…submit”未定义
for x in range(0,len(like)):
liked = like[x].get_attribute("data-testid")
if liked == "fb-ufi-likelink":
like[x].click()