如何用Python Selenium打印指定分类链接?解决重复输出问题
问题解决:获取指定分类下所有链接而非重复输出第一个
问题根源
你代码中使用了driver.find_element(By.XPATH, "//a[@class='classified ']"),这个方法只会返回页面中第一个匹配的元素,所以后续循环里反复打印的都是同一个链接。
修正方案
将find_element改为find_elements(注意复数形式),该方法会返回所有符合条件的元素列表,再遍历列表逐个提取链接即可。
核心修正代码
# 获取所有符合条件的链接元素 listing_results = driver.find_elements(By.XPATH, "//a[@class='classified ']") # 遍历每个元素打印链接 for result in listing_results: print(result.get_attribute('href'))
完整修正代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait # 创建Chrome浏览器实例 driver = webdriver.Chrome() driver.get("https://www.skelbimai.lt/") WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, "//a[@href='/skelbimai/technika/mobilus-telefonai']"))) driver.find_element(By.XPATH, "//a[@href='/skelbimai/technika/mobilus-telefonai']").click() WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, "//button[@mode='primary']"))) driver.find_element(By.XPATH, "//button[@mode='primary']").click() driver.find_element(By.XPATH, "//input[@id='search-query']").click() driver.find_element(By.XPATH, "//input[@id='search-query']").send_keys("nokia 3310") driver.find_element(By.XPATH, "//select[@id='search-place']").click() city_search = driver.find_element(By.XPATH, "//select[@id='search-place']") city_target = driver.find_element(By.XPATH, "//option[@value='19']") driver.execute_script("arguments[0].scrollIntoView();", city_target) driver.execute_script("window.scrollTo(0, 0);") city_target = WebDriverWait(driver, 1).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='19']"))) city_target.click() driver.find_element(By.XPATH, "//button[@type='submit']").click() # 改为find_elements获取所有匹配元素 listing_results = driver.find_elements(By.XPATH, "//a[@class='classified ']") # 遍历所有元素打印链接 for result in listing_results: print(result.get_attribute('href')) driver.close()
额外提示
建议在获取元素列表前添加显式等待,确保所有元素加载完成,避免因页面未完全渲染导致获取的元素数量不全:
WebDriverWait(driver, 5).until(EC.presence_of_all_elements_located((By.XPATH, "//a[@class='classified ']")))
内容的提问来源于stack exchange,提问作者Vytautas
相关产品推荐
相关产品推荐

