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

Selenium报InvalidArgumentException:url需为字符串,如何修复?

修复:Selenium InvalidArgumentException: 'url' must be a string

报错原因

你当前定位的是<h3>标签,但href属性属于它的父级<a>标签,所以element.get_attribute('href')返回None,将None传给driver.get()就会触发这个错误。

修复方案

方案1:直接定位<a>标签(推荐)

修改XPATH路径,直接指向包含href的<a>标签,这样能正确获取链接:

# 修改paths,去掉末尾的/h3,定位到a标签
paths = [
    '/html/body/div[2]/main/div[2]/div[2]/div[1]/section/div[2]/div[2]/div/div[1]/a',
    '/html/body/div[2]/main/div[2]/div[2]/div[1]/section/div[2]/div[3]/div/div[1]/a',
    '/html/body/div[2]/main/div[2]/div[2]/div[1]/section/div[2]/div[4]/div/div[1]/a',
]

urls = []
for path in paths:
    a_element = driver.find_element(By.XPATH, path)
    url = a_element.get_attribute('href')
    
    # 先校验url有效性,跳过无效链接
    if not url:
        print("无法获取有效链接")
        continue
    
    urls.append(url)
    # 两种跳转方式选其一:点击a标签 或 直接用driver.get(url)
    a_element.click()
    # driver.get(url)
    
    soup = BeautifulSoup(driver.page_source, 'lxml')
    p_element = soup.find('p')
    if p_element:
        print(p_element.get_text())
    else:
        print(f"No p tag found in {url}")
    
    # 若使用点击跳转,处理完当前页面后需返回原页面,继续处理下一个元素
    driver.back()

方案2:通过父级元素获取<a>标签

如果不想修改原有XPATH,可以通过<h3>标签找到它的父级<a>标签:

paths = [
    '/html/body/div[2]/main/div[2]/div[2]/div[1]/section/div[2]/div[2]/div/div[1]/a/h3',
    '/html/body/div[2]/main/div[2]/div[2]/div[1]/section/div[2]/div[3]/div/div[1]/a/h3',
    '/html/body/div[2]/main/div[2]/div[2]/div[1]/section/div[2]/div[4]/div/div[1]/a/h3',
]

urls = []
for path in paths:
    h3_element = driver.find_element(By.XPATH, path)
    # 找到父级a标签
    a_element = h3_element.find_element(By.XPATH, './..')
    url = a_element.get_attribute('href')
    
    if not url:
        print("无法获取有效链接")
        continue
    
    urls.append(url)
    a_element.click()
    
    soup = BeautifulSoup(driver.page_source, 'lxml')
    p_element = soup.find('p')
    if p_element:
        print(p_element.get_text())
    else:
        print(f"No p tag found in {url}")
    
    driver.back()

额外提示

  • 优先使用driver.get(url)跳转,比点击元素更稳定,避免页面加载异常
  • 始终校验url是否为空字符串或None,提前排除无效值

内容的提问来源于stack exchange,提问作者Mehmet Delioğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:20:24