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

Selenium执行脚本后无法继续操作 页面新闻板块爬取异常

修复方案

你现有代码存在两个直接导致功能失效的问题:

  • 股票代码传参错误:循环内写的stock_data[0].lower()会把完整股票代码截断为首字符,例如AKPL会被转为a,无法打开对应上市公司详情页
  • 点击逻辑缺少前置处理:页面顶部有固定悬浮导航栏,直接触发点击要么被导航栏拦截,要么因元素未进入可视区域、页面资源未加载完成导致点击无效
实现步骤
  • 打开公司详情页后,通过显式等待定位新闻Tab元素,将元素滚动到可视区域并上移偏移量避开顶部固定栏遮挡,再执行点击
  • 点击Tab后等待新闻列表异步加载完成,再提取内容
  • 采集前2-3条新闻的核心字段,最终统一写入JSON文件
可直接运行的代码
import json
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

stocks_data = ["AKPL", "NICA"]
collect_result = []

for stock_code in stocks_data:
    # 修复参数错误,传入完整小写股票代码
    self.driver.get(f'https://merolagani.com/CompanyDetail.aspx?symbol={stock_code.lower()}')
    wait = WebDriverWait(self.driver, 10)

    # 定位新闻Tab,滚动到可视区后上移200像素避开顶部固定导航
    news_tab = wait.until(EC.element_to_be_clickable((By.ID, 'ctl00_ContentPlaceHolder1_CompanyDetail1_lnkNewsTab')))
    self.driver.execute_script("arguments[0].scrollIntoView();window.scrollBy(0, -200);", news_tab)
    time.sleep(0.3)
    # 传入元素对象执行JS点击,彻底规避点击拦截问题
    self.driver.execute_script("arguments[0].click();", news_tab)

    # 等待新闻列表加载完成,取前3条
    news_list = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '#news-table .media')))
    news_data = []
    for news in news_list[:3]:
        title_link = news.find_element(By.CSS_SELECTOR, 'h4.media-heading a')
        news_data.append({
            "title": title_link.text.strip(),
            "publish_time": news.find_element(By.CSS_SELECTOR, 'span.text-muted').text.strip(),
            "summary": news.find_element(By.CSS_SELECTOR, 'p').text.strip(),
            "detail_url": title_link.get_attribute('href')
        })
    
    collect_result.append({
        "stock_code": stock_code,
        "news": news_data
    })

# 写入JSON文件,支持后续数据处理
with open("stock_news.json", "w", encoding="utf-8") as f:
    json.dump(collect_result, f, ensure_ascii=False, indent=2)

极端情况下如果仍报点击拦截错误,可以在页面加载完成后先执行self.driver.execute_script("document.querySelector('.navbar-fixed-top')?.remove()"),直接删除顶部固定导航栏彻底消除遮挡。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:48:11