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

Selenium通过Class Name定位Instagram弹窗按钮超时问题求助

Instagram登录后关闭弹窗失败问题解决

已登录Instagram,尝试点击「Not Now」按钮关闭弹窗,但无论如何操作都会报错,以下是相关代码(用户名和密码已替换)、错误日志及目标元素结构:

原代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

import time

path = "\/Users/almogbenlulu/Desktop/Almog/python/chromedriver.exe"
s = Service(path)
driver = webdriver.Chrome(service=s)

driver.get("\https://www.instagram.com/")

WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.NAME, 'username')))

driver.find_element(By.NAME, "\username").send_keys("\*****")
driver.find_element(By.NAME, "\password").send_keys("\*****")
driver.find_element(By.XPATH, '//*[@id=\"loginForm\"]/div/div[3]/button/div').click()

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, '_acan _acao _acas')))

driver.find_element(By.CLASS_NAME, '_acan _acao _acas').click()

driver.quit()

错误日志

Traceback (most recent call last):
  File "\/Users/almogbenlulu/Desktop/Almog/python/Automation/venv/day1/insta.py", line 22, in <module>
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, '_acan _acao _acas')))
  File "\/Users/almogbenlulu/Desktop/Almog/python/Automation/venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py", line 95, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 
Stacktrace:
0   chromedriver                        0x00000001048052c8 chromedriver + 4752072
1   chromedriver                        0x0000000104785463 chromedriver + 4228195
2   chromedriver                        0x00000001043e8b18 chromedriver + 441112
3   chromedriver                        0x0000000104425e21 chromedriver + 691745
4   chromedriver                        0x0000000104426061 chromedriver + 692321
5   chromedriver                        0x00000001044615e4 chromedriver + 935396
6   chromedriver                        0x0000000104446d2d chromedriver + 826669
7   chromedriver                        0x000000010445f134 chromedriver + 926004
8   chromedriver                        0x0000000104446b33 chromedriver + 826163
9   chromedriver                        0x00000001044179fd chromedriver + 633341
10  chromedriver                        0x0000000104419051 chromedriver + 639057
11  chromedriver                        0x00000001047d230e chromedriver + 4543246
12  chromedriver                        0x00000001047d6a88 chromedriver + 4561544
13  chromedriver                        0x00000001047de6df chromedriver + 4593375
14  chromedriver                        0x00000001047d78fa chromedriver + 4565242
15  chromedriver                        0x00000001047ad2cf chromedriver + 4391631
16  chromedriver                        0x00000001047f65b8 chromedriver + 4691384
17  chromedriver                        0x00000001047f6739 chromedriver + 4691769
18  chromedriver                        0x000000010480c81e chromedriver + 4782110
19  libsystem_pthread.dylib             0x00007ff8188bd4e1 _pthread_start + 125
20  libsystem_pthread.dylib             0x00007ff8188b8f6b thread_start + 15

Process finished with exit code 1

目标元素结构

<div class="_ac8f"><button class="_acan _acao _acas" type="button">Not Now</button></div>

问题原因及解决方法

  1. By.CLASS_NAME不支持多类名:使用By.CLASS_NAME, '_acan _acao _acas'定位元素是错误的,Selenium的By.CLASS_NAME仅支持单个类名,多类名会导致定位失败。
  2. 多余转义字符干扰:代码中路径、URL、NAME参数里的\属于多余转义,会导致解析错误,需直接移除。

修正后的代码

推荐两种稳定的定位方式:

方式一:CSS_SELECTOR定位多类名元素

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

path = "/Users/almogbenlulu/Desktop/Almog/python/chromedriver.exe"
s = Service(path)
driver = webdriver.Chrome(service=s)

driver.get("https://www.instagram.com/")

# 等待用户名输入框可见
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.NAME, 'username')))

# 输入用户名和密码
driver.find_element(By.NAME, "username").send_keys("*****")
driver.find_element(By.NAME, "password").send_keys("*****")

# 点击登录按钮
driver.find_element(By.XPATH, '//*[@id="loginForm"]/div/div[3]/button/div').click()

# 等待弹窗按钮可点击并触发点击
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "._acan._acao._acas"))).click()

driver.quit()

方式二:XPATH按按钮文本定位

若Instagram类名频繁变更,按文本定位更稳定:

# 替换等待及点击的代码段
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Not Now']"))).click()

内容的提问来源于stack exchange,提问作者Almog Ben-Lulu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:20:49