首页 > 解决方案 > 使用硒单击 Instagram 页面中的项目时遇到问题

问题描述

嗨,我在 Mac 上使用 Firefox。我尝试在 python 上使用 selenium 来单击标签中前 3 张图片的点赞按钮。但是,代码在检查点赞按钮是否被点击时出现错误,并且点赞按钮被其他项目阻挡。

我有错误

  1. ElementClickInterceptedException:元素在点 (311,460) 处不可点击,因为另一个元素遮住了它
  2. AttributeError:“WebDriver”对象没有属性“findElement”

下面是代码。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.common.keys import Keys
import time

sleeptime = 10

#login function for account etc
def login(browser):
    browser.maximize_window()
    browser.get("https://www.instagram.com")
    
    time.sleep(sleeptime)
    
    username = browser.find_element(By.NAME,"username")
    password = browser.find_element(By.NAME,"password")
    
    #grab all the button (take care if button change position, currently login is at the first) [0] is the first button
    login = browser.find_element(locate_with(By.TAG_NAME, "button").below(password))
    
    #input the username and password
    username.send_keys("Hkk_james38")
    password.send_keys("myfmox-tidgab-xotNo0")
    login.click()
    
    
    
    #to hold the browser to prevent it close itselfs
    time.sleep(sleeptime)

def Visit_Tag(driver, url):
    sleeptime = 6
    driver.get(url)
    time.sleep(sleeptime)
    
    #select all the pictures and save in the list
    pictures = driver.find_elements_by_css_selector("div[class = '_9AhH0']")
    print(pictures)
    image_count = 0 
    
    #click the like in each picture by loop
    for picture in pictures:
        
        if image_count > 3:
            break
                
        picture.click()
        time.sleep(sleeptime)
        
        #click the like button, cehck if the like button is click or not
        if driver.find_elements(By.XPATH,"//article//section//button//*[@aria-label='Unlike']").size() > 0:
            like = driver.find_element(By.XPATH,"//article//section//button//*[@aria-label='Like']")
        like.click()
       
        #close the tag
        close = driver.find_element(By.XPATH,"//article//section//button//*[@aria-label='Close']")
        close.click()
        
        image_count += 1
        
    
    
#main function to execute
def main():
    #find webdriver location for firefox
    service = Service('/usr/local/bin/geckodriver')
    browser = webdriver.Firefox(service = service)
    login(browser)
    
    #tag for the pages u will follow and interested in
    tags = {
        "programming",
        
        }
    
    websites = []
    
    for tag in tags:
        Visit_Tag(browser, f"https://www.instagram.com/explore/tags/{tag}")
        
    
main()

标签: python-3.xselenium-webdriverselenium-firefoxdriver

解决方案


正如您看到的错误消息清楚地提到的那样findElements,该WebDriver对象不存在这样的方法或属性。
代替

if driver.findElements(By.XPATH("//article//section//button//*[@aria-label='Unlike']")).size() > 0:

尝试使用

if driver.find_elements(By.XPATH("//article//section//button//*[@aria-label='Unlike']")).size() > 0:

至于

ElementClickInterceptedException:元素在点 (311,460) 处不可点击,因为另一个元素遮住了它

错误:尚不清楚哪些代码行会导致该错误。
您没有提供整个错误回溯,也没有提供网页 URL,所以我们无法猜测。


推荐阅读