Python Selenium网页爬虫单独运行正常,for循环调用报InvalidArgumentException如何解决
报错触发原因
- 核心原因1:DataFrame的
extra_link列存在无效值:比如空值、NaN、非http/https开头的非法链接、格式异常的字符串,单独测试时用的是合法链接不会触发问题,批量遍历碰到无效值时,driver.get()传入非法URL就会抛出InvalidArgumentException。 - 原因2:每次调用爬虫函数都重复创建、销毁ChromeDriver实例,批量运行时容易出现Chrome进程残留、端口/资源占用冲突,触发参数无效报错。
- 原因3:代码中使用的
chrome_options是Selenium已废弃的参数,新旧版本适配问题也可能触发该类参数异常。
修复方案
- 先预处理链接列,过滤/标记无效链接,避免传入非法URL
- 复用同一个ChromeDriver实例,不要每次调用函数都重新创建,减少资源消耗和冲突
- 增加异常捕获逻辑,单条链接爬取失败时不中断整个批量任务
- 替换废弃的
chrome_options参数为官方推荐的options参数
修改后参考代码
import time import re import pandas as pd from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.options import Options # 初始化driver放到函数外,全局复用 options = Options() options.add_argument('--headless') options.add_argument('--disable-gpu') options.add_argument('--no-sandbox') # 新增参数避免权限类报错 driver = webdriver.Chrome(executable_path=r"/Users/christianfreeman/Desktop/Social_Media/chromedriver", options=options) def hit_scraper(link): # 先校验链接合法性 if pd.isna(link) or not str(link).startswith(('http://', 'https://')): return [] url = str(link) try: driver.get(url) time.sleep(3) page = driver.page_source soup = BeautifulSoup(page, 'html.parser') container = soup.find_all('span',attrs={"class":"ng-star-inserted"}) container_list = str(list(container)) pattern = r'#\S+' return re.findall(pattern,container_list) except Exception as e: print(f"链接{url}爬取失败:{str(e)}") return [] # 批量爬取 df1['tags'] = [hit_scraper(i) for i in df1['extra_link']] # 全部爬取完成后再关闭driver driver.quit()
如果爬取量超过1000条,可每爬200条主动重启一次driver释放内存,避免长期运行导致的异常。
内容的提问来源于stack exchange,提问作者ChrisFr33man
相关产品推荐
相关产品推荐

