如何通过Selenium抓取指定div标签内的href链接?
解决方案
要抓取class为small-cells的div标签内的所有href链接,你需要修改元素定位逻辑,将范围限定在目标div内部,同时确保页面元素加载完成后再执行抓取,避免因元素未渲染导致的空结果。
具体修改要点:
- 修正导入语句拼写错误:原代码第一行
rom selenium import webdriver缺少字母f,应改为from selenium import webdriver。 - 缩小XPath定位范围:使用
//div[contains(@class, 'small-cells')]//a作为定位表达式,先定位所有class包含small-cells的div,再抓取这些div内部的所有a标签。 - 添加显式等待:确保目标div加载完成后再查找链接,避免页面未渲染完成时抓取不到元素。
修改后的完整代码:
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 from selenium.common.exceptions import TimeoutException # 初始化Chrome驱动并访问目标页面 url = "https://navalcommand.enjin.com/forum/viewforum/2989694/m/11178354/page/1" driver = webdriver.Chrome() driver.get(url) try: # 等待class为small-cells的div加载完成,最长等待10秒 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, "//div[contains(@class, 'small-cells')]")) ) # 抓取目标div内的所有a标签 elems = driver.find_elements(By.XPATH, "//div[contains(@class, 'small-cells')]//a") # 遍历输出每个a标签的href属性(过滤空值) for elem in elems: href = elem.get_attribute("href") if href: print(href) except TimeoutException: print("等待目标元素加载超时") finally: driver.quit() # 关闭浏览器
补充说明:
- 如果
small-cells是div的唯一class,也可以用//div[@class='small-cells']//a,但contains写法更兼容class属性包含多个值的场景(比如div的class是small-cells other-class)。 - 添加
if href:判断可以过滤掉没有href属性的a标签,避免输出空值。
内容的提问来源于stack exchange,提问作者Jherky
相关产品推荐
相关产品推荐

