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

如何使用Selenium点击速卖通的年龄验证弹窗?

解决速卖通年龄验证弹窗点击失败问题

问题根源

你遇到的NoSuchElementException主要由以下原因导致:

  • 绝对XPATH依赖页面固定结构,速卖通页面动态更新后会直接失效
  • 原代码存在语法错误:search = browser.find_element(...)缩进错误,且.click未加括号,实际未执行点击操作
  • 未采用可靠的等待机制,或弹窗可能嵌套在iframe中(部分场景)

修复方案

1. 修正基础语法错误

先解决代码中的缩进和方法调用问题,确保逻辑可正常执行。

2. 使用稳定的元素定位方式

根据你提供的HTML结构,推荐两种可靠定位方式:

  • CSS选择器:利用class的稳定前缀(避免动态后缀影响)
  • 文本定位:直接通过按钮文本"I AM OVER 18"定位

3. 采用显式等待替代固定sleep

用WebDriverWait等待元素可点击,确保元素加载完成后再执行操作。

完整修正代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def aliexpress_driver():
    url = 'https://www.aliexpress.com/'
    # 配置浏览器选项,模拟真实用户(可选,应对反爬)
    options = webdriver.ChromeOptions()
    options.add_argument("--disable-blink-features=AutomationControlled")
    options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
    
    global browser
    browser = webdriver.Chrome(options=options)
    browser.get(url)

def search_for(product):
    aliexpress_driver()
    # 定位搜索框并输入内容
    search_box = browser.find_element(By.ID, "search-key")
    search_box.send_keys(product)
    # 点击搜索按钮
    search_btn = browser.find_element(By.XPATH, '//*[@id="form-searchbar"]/div[1]/input')
    browser.execute_script("arguments[0].click();", search_btn)
    
    # 尝试点击年龄验证按钮(优先CSS选择器)
    try:
        age_btn = WebDriverWait(browser, 20).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class*='law18--btn--'][class*='law18--left--']"))
        )
        age_btn.click()
        print("年龄验证按钮点击成功")
    except:
        # 备用:文本定位
        try:
            age_btn = WebDriverWait(browser, 20).until(
                EC.element_to_be_clickable((By.XPATH, "//div[contains(text(), 'I AM OVER 18')]"))
            )
            age_btn.click()
            print("年龄验证按钮点击成功")
        except Exception as e:
            print(f"点击失败:{str(e)}")

# 调用测试
search_for("test")

额外处理:iframe嵌套场景

如果上述代码仍失效,检查弹窗是否嵌套在iframe中:打开开发者工具,查看按钮元素是否被<iframe>包裹。若是,添加iframe切换逻辑:

# 先切换到目标iframe(替换为实际iframe的定位方式)
iframe = WebDriverWait(browser, 20).until(EC.presence_of_element_located((By.TAG_NAME, "iframe")))
browser.switch_to.frame(iframe)
# 执行按钮点击操作(同上)
age_btn = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class*='law18--btn--'][class*='law18--left--']")))
age_btn.click()
# 操作完成后切回主文档
browser.switch_to.default_content()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:35:40