Python / Selenium:识别所有Instagram心并“赞”它们

时间:2019-01-01 22:34:34

标签: python selenium instagram

该程序应该能够检测Instagram中的所有心脏,然后发出“赞”。我知道这里有一个Instagram API,但出于教育目的尝试使用Selenium实现。另外,我正在使用Chrome。

这是我到目前为止尝试过的:

# scroll down to the bottom of the page
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

driver.maximize_window()

# find all heart links
hearts = driver.find_elements_by_xpath("//button[@class='dCJp8 afkep coreSpriteHeartOpen _0mzm-']")

for i in range(len(hearts)):
    hearts[i].click()
    sleep(3)

错误:

selenium.common.exceptions.WebDriverException: Message: unknown error: Element <button class="dCJp8 afkep coreSpriteHeartOpen _0mzm-">...</button> is not clickable at point (192, 20). Other element would receive the click: <div class="                  Igw0E   rBNOH        eGOV_     ybXk5    _4EzTm                                                                                                              ">...</div>
  (Session info: chrome=71.0.3578.98)

根据我的理解,程序所指向的元素似乎并不正确。这就是我正在使用的:

enter image description here

我也尝试了upper和child span元素。有人对可能出什么问题有其他想法吗?预先感谢。

编辑: 使用Actionchain()解决。在尝试单击该元素之前,我添加了代码以首先移至该元素。

hearts = driver.find_elements_by_xpath("//span[@class='fr66n']")

for h in range(len(hearts)):
    ActionChains(driver).move_to_element(hearts[h]).click(hearts[h]).perform()
    print(hearts[h])

2 个答案:

答案 0 :(得分:2)

我不太确定。我的猜测是您要单击的元素不在屏幕上。尝试先滚动到该元素,然后单击。

答案 1 :(得分:0)

这应该有效:

likeButtonPath= 'section.ltpMr.Slqrh > span.fr66n > button > div > span > svg[aria-label="Like"]'
elements= LOGINPG.find_elements_by_css_selector(likeButtonPath)

for element in elements:
  LOGINPG.execute_script('arguments[0].scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"});', element)
  element.click()