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

使用Selenium无法点击TradingEconomics网站Show More按钮求助

解决TradingEconomics“Show More”按钮无法点击的爬取问题

问题说明

我一直使用TradingEconomics的SPX页面爬取数据,此前通过点击“Show More”按钮加载更多内容,但近期网站更新后,该按钮无法被点击。已尝试以下代码均无效:

time.sleep(4) 
driver.find_element(By.XPATH,"/html/body/form/div[3]/div/div/div[7]/div[1]/div/div/span").click()

element = WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "/html/body/form/div[3]/div/div/div[7]/div[1]/div/div/span")))
driver.execute_script("arguments[0].click();", element)

可行解决思路

1. 更换元素定位方式(优先推荐)

绝对XPATH(/html/body/...)极易因网站结构更新失效,改用相对定位:

  • 按按钮文本定位:
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    
    # 等待按钮可点击,用文本模糊匹配避免大小写/空格问题
    element = WebDriverWait(driver, 30).until(
        EC.element_to_be_clickable((By.XPATH, "//span[contains(text(), 'Show More')]"))
    )
    element.click()
    
  • 按class或其他属性定位:打开浏览器F12,查看按钮的class/id属性,用更稳定的选择器,比如:
    # 示例:按class定位(替换为实际class名)
    element = WebDriverWait(driver, 30).until(
        EC.element_to_be_clickable((By.CLASS_NAME, "show-more-btn"))
    )
    element.click()
    

2. 处理iframe或Shadow DOM

如果按钮嵌套在iframe内,需先切换上下文:

# 定位并切换到iframe(替换为实际iframe的id/XPATH)
iframe = WebDriverWait(driver, 20).until(
    EC.frame_to_be_available_and_switch_to_it((By.ID, "content-iframe"))
)
# 定位并点击按钮
element = WebDriverWait(driver, 30).until(
    EC.element_to_be_clickable((By.XPATH, "//span[text()='Show More']"))
)
element.click()
# 操作完成后切回主页面
driver.switch_to.default_content()

若按钮在Shadow DOM中,用JS获取Shadow Root后定位:

# 替换为Shadow Host的选择器
shadow_root = driver.execute_script("return document.querySelector('#shadow-host').shadowRoot")
element = shadow_root.find_element(By.XPATH, "//span[text()='Show More']")
element.click()

3. 滚动到按钮可见后点击

按钮可能在视口外导致无法触发点击,先滚动到元素位置:

element = WebDriverWait(driver, 30).until(
    EC.presence_of_element_located((By.XPATH, "//span[text()='Show More']"))
)
# 滚动到元素顶部可见
driver.execute_script("arguments[0].scrollIntoView(true);", element)
# 等待元素可点击后点击
WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//span[text()='Show More']"))
).click()

4. 应对反爬机制

网站更新后可能新增反爬限制:

  • 手动登录后保持Session,避免匿名访问;
  • 添加浏览器请求头,模拟真实用户:
    driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'}})
    
  • 用随机等待替代固定延迟:
    import random
    time.sleep(random.uniform(2, 5))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:30:05