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

Python Selenium网页爬虫单独运行正常,for循环调用报InvalidArgumentException如何解决

报错触发原因
  • 核心原因1:DataFrame的extra_link列存在无效值:比如空值、NaN、非http/https开头的非法链接、格式异常的字符串,单独测试时用的是合法链接不会触发问题,批量遍历碰到无效值时,driver.get()传入非法URL就会抛出InvalidArgumentException。
  • 原因2:每次调用爬虫函数都重复创建、销毁ChromeDriver实例,批量运行时容易出现Chrome进程残留、端口/资源占用冲突,触发参数无效报错。
  • 原因3:代码中使用的chrome_options是Selenium已废弃的参数,新旧版本适配问题也可能触发该类参数异常。
修复方案
  1. 先预处理链接列,过滤/标记无效链接,避免传入非法URL
  2. 复用同一个ChromeDriver实例,不要每次调用函数都重新创建,减少资源消耗和冲突
  3. 增加异常捕获逻辑,单条链接爬取失败时不中断整个批量任务
  4. 替换废弃的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:42:04