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
相关产品推荐
相关产品推荐

