You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tinder Swiping Bot无法多次滑动问题求助及元素定位疑问

Tinder滑动Bot仅单次生效问题排查与解决

问题描述

我正在完成Udemy课程《100 Days of Code: The Complete Python Pro Bootcamp》中的“Tinder Swiping Bot”项目,但登录Tinder网站后仅能执行一次滑动操作。我怀疑每次显示新图片时元素的XPath会发生变化,尝试使用CSS选择器和类定位点赞按钮但未成功。

问题代码

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException

#Entering the website
website_url = "https://tinder.com/"
driver = webdriver.Chrome()
driver.get(website_url)
# use delay function to get all tags
driver.implicitly_wait(20)

# Clicking on sign in button
tinder_login_button = driver.find_element(By.XPATH, '//*[@id="q1434999767"]/div/div[1]/div/main/div[1]/div/div/div/div/header/div/div[2]/div[2]/a/div[2]/div[2]') #'//*[@id="c1606223767"]/div/div[1]/div/main/div[1]/div/div/div/div/header/div/div[2]/div[2]/a/div[2]/div[2]')
tinder_login_button.click()
sleep(4)
.
.
#login into tinder website using facebook
.
.

#click I accept cookies button
iaccept_button = driver.find_element(By.XPATH, '//*[@id="q1434999767"]/div/div[2]/div/div/div[1]/div[1]/button') #'//*[@id="c1606223767"]/div/div[2]/div/div/div[1]/div[1]/button/div[2]/div[2]')
iaccept_button.click()
sleep(5)

#like button
for n in range(100):
    sleep(5)
    try:
        like_button = driver.find_element(By.XPATH, '//*[@id="q1434999767"]/div/div[1]/div/main/div[1]/div/div/div[1]/div[1]/div/div[4]/div/div[4]/button')
        like_button.click()
    except NoSuchElementException:
        sleep(5)

问题原因与解决方案

原因

你使用的XPath包含动态生成的随机ID(如q1434999767),这类ID是前端框架(如React)在渲染页面/组件时自动生成的,不仅页面刷新会变,每次加载新用户卡片时也会重新生成,所以第一次点击后,后续的XPath就失效了。

解决方法

改用基于固定属性的稳定定位方式,优先选择以下几种:

  • 通过aria-label属性定位:Tinder的交互按钮通常会有固定的aria标签,点赞按钮的标签一般是Like,这是最可靠的定位方式之一。
  • 通过测试ID(data-testid)定位:很多网站会给测试用元素添加固定的data-testid属性,Tinder的点赞按钮测试ID通常是like。
  • 通过图标/文本特征定位:如果以上两种都不可用,可以找按钮内的固定图标类或文本内容。

修改后的点赞循环代码

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
# 推荐使用显式等待替代硬sleep
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# ... 登录、cookie同意等代码 ...

# 初始化显式等待对象,超时时间10秒
wait = WebDriverWait(driver, 10)

for n in range(100):
    try:
        # 用aria-label定位点赞按钮,等待按钮可点击
        like_button = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[@aria-label="Like"]')))
        like_button.click()
    except NoSuchElementException:
        # 处理可能出现的弹窗(如升级提示、匹配弹窗)
        try:
            close_popup = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[@aria-label="Close"]')))
            close_popup.click()
        except NoSuchElementException:
            sleep(2)

额外优化建议

  • 替换所有使用动态ID的定位(如登录按钮、cookie同意按钮),比如登录按钮可以用//a[contains(text(), "Sign in")]或对应的aria标签。
  • 尽量用显式等待替代硬编码的sleep(),显式等待会在元素出现/可点击时立即执行,比固定等待时间更高效且稳定。

内容的提问来源于stack exchange,提问作者Xareni_GH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 06:00:22