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

Selenium访问App Store模态框元素时偶发TimeoutException异常求助

问题根因
  • 你设置等待可见的modal-container元素本身在页面加载完成后就已存在,未点击按钮时仅内容为空,等待空节点可见没有意义,无法判断模态框内容是否加载完成
  • 按钮的CSS选择器用了全量class匹配,网站动态渲染时可能调整class顺序,导致选择器偶尔失效,按钮点击失败,自然加载不出模态框内容
  • 无头模式下默认窗口尺寸极小,按钮可能不在视口范围内,导致点击事件不生效,模态框无法弹出
修正后可稳定运行的代码

改动点说明:

  1. 增加窗口尺寸配置,确保无头模式下元素在视口内可正常点击
  2. 简化按钮选择器,改用部分class匹配,避免动态class顺序导致的匹配失败
  3. 点击按钮后改为等待版本列表父节点可见,替代无意义的空容器等待
  4. 兼容新Selenium版本的元素查找语法,避免API过期报错
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless=new")
# 固定窗口尺寸,避免无头模式下元素不在视口
options.add_argument("--window-size=1920,1080")
# 禁用自动化检测,避免被网站拦截
options.add_argument("--disable-blink-features=AutomationControlled")

url = "https://apps.apple.com/us/app/twitter/id333903271?ign-mpt=uo%3D4"
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
driver.get(url)

try:
    # 等待按钮可点击,简化选择器,不做全class匹配
    button = WebDriverWait(driver, 15).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, '.version-history button.we-modal__show'))
    )
    button.click()

    # 等待版本列表加载完成,替代等待空容器
    version_list = WebDriverWait(driver, 15).until(
        EC.visibility_of_element_located((By.CSS_SELECTOR, 'ul.version-history__items'))
    )
    # 提取所有版本号
    version_items = version_list.find_elements(By.CSS_SELECTOR, 'h4.version-history__item__version-number')
    versions = [v.text.strip() for v in version_items]
    print(versions)
finally:
    driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:39:02