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

Selenium遍历页面链接打印文本时触发InvalidArgumentException求助

问题分析与解决

错误原因

  1. 无效URL:页面中部分<a>标签的href不是合法的HTTP/HTTPS链接(比如为空、是javascript:协议、相对路径未补全域名),调用driver.get(url)时触发InvalidArgumentException。
  2. DOM元素失效:首次跳转页面后,原页面的links元素引用已失效,后续循环中再调用link.get_attribute('href')会获取到错误值或抛出异常。
  3. 驱动路径错误:path = "example"不是ChromeDriver的正确路径,属于潜在问题。
  4. 打印对象而非文本:print(txt)打印的是元素对象,而非页面实际文本内容。

修正代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 正确设置ChromeDriver路径:若已加入系统PATH,可直接用webdriver.Chrome()
driver = webdriver.Chrome(executable_path="chromedriver.exe")  # Windows示例,替换为你的实际路径
base_url = "https://www.abdsd.com"
driver.get(base_url)

main_div = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "site-container"))
)

# 提前提取所有有效URL,避免页面跳转后DOM元素失效
valid_urls = []
links = main_div.find_elements(By.TAG_NAME, "a")
for link in links:
    url = link.get_attribute('href')
    # 过滤无效URL:仅保留http/https开头的链接
    if url and url.startswith(('http://', 'https://')):
        valid_urls.append(url)

# 遍历有效URL,访问并打印页面文本
for url in valid_urls:
    try:
        driver.get(url)
        time.sleep(2)  # 等待页面加载,可根据实际情况调整
        # 获取body文本内容
        body_text = driver.find_element(By.XPATH, "/html/body").text
        print(f"=== 页面 {url} 文本内容 ===")
        print(body_text)
        print("\n")
    except Exception as e:
        print(f"访问 {url} 失败: {str(e)}")
        continue

driver.quit()

关键优化点

  • 提前收集有效URL:先把所有合法的HTTP/HTTPS链接提取到列表,避免页面跳转后原元素失效。
  • URL过滤:跳过空值、非HTTP协议的链接,避免无效请求。
  • 正确打印文本:使用.text属性获取元素的文本内容。
  • 异常捕获:对每个URL的访问添加异常处理,避免单个链接失败导致整个程序终止。
  • 驱动路径修正:确保ChromeDriver路径正确,推荐将驱动加入系统PATH,直接用webdriver.Chrome()初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:24:37