Selenium网页爬虫无法提取打印href链接 程序运行无报错
问题根因
代码无法输出链接且全程无报错,由3个问题导致:
- 定位链接的CSS选择器逻辑错误:
href是<a>标签的内置属性,不是独立的HTML子标签。你写的选择器.search-list p.card-body__headline href是在查找p标签下名为<href>的子元素,页面中不存在这类元素。Selenium的find_elements方法找不到匹配目标时会直接返回空列表,后续遍历链接的循环根本不会执行,自然既无输出也不抛错。 - 定位逻辑冗余:你第一次定位拿到的
<a>标签集合,本身就同时存储了标签展示文本(角色名)和跳转地址(href属性),完全不需要分两次分别查找名称和链接,分开遍历反而可能出现名称和链接匹配错位的问题。 - 浏览器配置未生效:你提前定义了无头模式、窗口大小的
options配置,但初始化Chrome驱动实例时没有传入该参数,这些配置全部没有实际生效。
修复后可直接运行的代码
from selenium import webdriver from selenium.webdriver import Keys from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC user_input = input("character: ") options = Options() options.headless = True options.add_argument("--window-size=1920,1080") # 修复:传入options参数,让无头、窗口大小配置正常生效 driver = webdriver.Chrome("C:\Program Files (x86)\chromedriver.exe", options=options) driver.get("https://www.marvel.com/search") search_input_xpath = "//input[@placeholder='Search']" search_input = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, search_input_xpath))) search_input.send_keys(user_input) first_item_in_auto_suggest_area_xpath = "//div[contains(@id,'react-autowhatever')]/ul" WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, first_item_in_auto_suggest_area_xpath))) search_input.send_keys(Keys.ENTER) # 修复:等待所有搜索结果的a标签加载完成,避免漏取数据 WebDriverWait(driver, 20).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".search-list p.card-body__headline a")) ) # 单次遍历同步提取角色名和对应链接,从根源避免匹配错位 character_tags = driver.find_elements(By.CSS_SELECTOR, ".search-list p.card-body__headline a") for tag in character_tags: char_name = tag.text.strip() char_link = tag.get_attribute("href") # 相邻打印名称和关联链接 print(f"角色名称:{char_name} | 对应链接:{char_link}") # 运行结束自动释放浏览器进程 driver.quit()
关键修改说明
- 删除了错误的href元素定位逻辑:直接从已定位到的
<a>标签对象上调用get_attribute("href")即可获取链接值,不需要单独定位。 - 合并遍历逻辑:同一次循环中从同一个标签对象提取名称和链接,确保名称和链接一一对应。
- 补全了驱动初始化时的options传参,修复配置不生效的问题。
- 调整显式等待条件:用
presence_of_all_elements_located替代单个元素存在的判断,确保所有搜索结果加载完成后再提取数据,避免漏取。 - 增加
driver.quit()逻辑,运行结束后自动关闭浏览器进程,避免后台残留Chrome进程占用资源。
内容的提问来源于stack exchange,提问作者Christopher McClure
相关产品推荐
相关产品推荐

