如何使用driver.get(url)遍历访问页面提取的href链接列表?
解决Selenium遍历访问提取到的Href链接问题
你的代码核心问题有两个:
- 循环内重复执行
driver.find_elements完全多余,还会覆盖初始获取的元素列表 driver.get(aa)传入的是元素对象列表,而driver.get()要求传入字符串格式的URL,必须从每个元素中提取href属性值
修正步骤
- 先等待目标元素加载完成,一次性提取所有元素的
href链接并存入列表(处理可能的相对链接,拼接网站域名) - 遍历链接列表,逐个调用
driver.get()访问页面 - 每个页面加载完成后提取数据,存入pandas DataFrame
修正后的完整代码
import time import pandas as pd from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from webdriver_manager.chrome import ChromeDriverManager # 初始化浏览器 options = webdriver.ChromeOptions() options.add_argument('--start-maximized') options.add_experimental_option("detach", True) driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) # 访问主页面 base_url = "https://www.bookmaker.com.au" driver.get(f"{base_url}/sports/soccer") # 等待目标元素加载完成,提取所有href链接 wait = WebDriverWait(driver, 15) # 等待元素可见(比presence更可靠,确保元素可交互) wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "a[class *= 'matches-filter__region']"))) # 提取所有链接,处理相对链接 region_links = [] elements = driver.find_elements(By.CSS_SELECTOR, "a[class *= 'matches-filter__region']") for elem in elements: href = elem.get_attribute('href') # 处理相对链接(如果网站返回的是相对路径) if not href.startswith('http'): href = f"{base_url}{href}" region_links.append(href) # 准备存储数据的DataFrame,可根据实际需求调整列名 columns = ["页面标题", "区域名称", "赛事数量"] df = pd.DataFrame(columns=columns) # 遍历链接逐个访问并提取数据 for link in region_links: driver.get(link) # 等待页面加载完成,建议用WebDriverWait等待页面关键元素,这里用sleep做示例 time.sleep(2) # 示例:提取页面标题和区域名称(需根据目标页面实际HTML结构调整选择器) page_title = driver.title region_name = driver.find_element(By.CSS_SELECTOR, "h1").text # 示例:提取赛事数量(假设赛事数量在特定class标签内) match_count = driver.find_element(By.CSS_SELECTOR, ".matches-count").text if driver.find_elements(By.CSS_SELECTOR, ".matches-count") else "无数据" # 将数据添加到DataFrame new_row = pd.DataFrame({ "页面标题": [page_title], "区域名称": [region_name], "赛事数量": [match_count] }) df = pd.concat([df, new_row], ignore_index=True) # 可选:关闭浏览器 # driver.quit() # 打印结果 print(df)
关键说明
- 提前一次性提取所有
href链接:页面跳转后原页面的元素会变为stale,提前存好链接可避免元素失效问题 - 处理相对链接:部分网站的
href返回相对路径,必须拼接base URL才能正常访问 - 页面等待:优先使用
WebDriverWait等待特定元素加载,比time.sleep更稳定,可根据目标页面的核心元素调整等待条件 - 数据提取逻辑:需要根据每个目标页面的实际HTML结构,修改CSS选择器或XPath来提取对应数据
内容的提问来源于stack exchange,提问作者iwasstandingathedairynextminut
相关产品推荐
相关产品推荐

