Selenium遍历页面链接打印文本时触发InvalidArgumentException求助
问题分析与解决
错误原因
- 无效URL:页面中部分
<a>标签的href不是合法的HTTP/HTTPS链接(比如为空、是javascript:协议、相对路径未补全域名),调用driver.get(url)时触发InvalidArgumentException。 - DOM元素失效:首次跳转页面后,原页面的
links元素引用已失效,后续循环中再调用link.get_attribute('href')会获取到错误值或抛出异常。 - 驱动路径错误:
path = "example"不是ChromeDriver的正确路径,属于潜在问题。 - 打印对象而非文本:
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
相关产品推荐
相关产品推荐

