python-3.x - 使用硒单击 Instagram 页面中的项目时遇到问题
问题描述
嗨,我在 Mac 上使用 Firefox。我尝试在 python 上使用 selenium 来单击标签中前 3 张图片的点赞按钮。但是,代码在检查点赞按钮是否被点击时出现错误,并且点赞按钮被其他项目阻挡。
我有错误
- ElementClickInterceptedException:元素在点 (311,460) 处不可点击,因为另一个元素遮住了它
- 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()
解决方案
正如您看到的错误消息清楚地提到的那样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,所以我们无法猜测。
推荐阅读
- keycloak - Keycloak 获取用户密码
- javascript - 使用 css 替换或隐藏从插件生成的单词
- .net - [Content_Types].xml 文件夹不同使 System.IO.Packaging.Package 无法读取 Uri 信息
- sql - 插入新数据 BigQuery
- shell - 如何在 shell 脚本中声明数组?
- powershell - 将最近编译的构建存储到指定位置的 MSBuild 标志是什么?
- api - 如何从flutter api中获取数据,参数为主体/原始数据
- reactjs - React Fabric Ui面板无法关闭
- puppeteer - 如何单击按钮 puppeteer?
- flutter - 如何将自定义裁剪比例添加到 image_cropper 库中 - Flutter