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
相关产品推荐
相关产品推荐

