Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium:无法单击Facebook';它像按钮_Selenium_Selenium Webdriver_Web Scraping - Fatal编程技术网

Selenium:无法单击Facebook';它像按钮

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

我有一个帖子(生日愿望)的列表,我想把喜欢。Facebook只显示一个URL,所以我用Selenium打开它,向下滚动以显示帖子(单击“显示更多”div)

当我试图收集类似的按钮并单击它们时,我遇到了问题

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()