You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:调用.get_attribute('href')时部分链接返回None的问题

问题解决:部分商品链接href返回None的处理

可能原因

  • 部分商品的链接属性由JavaScript动态赋值,Selenium的get_attribute('href')在元素未完全渲染、JS未执行完毕时会返回None
  • 页面内不同商品的链接元素结构存在差异,部分商品的链接未使用hz-Listing-coverLink类名

解决方案

方案1:用JavaScript直接读取href属性

对于动态渲染的元素,通过JS获取属性比Selenium的get_attribute更可靠,修改链接获取逻辑:

link_element = artikel.find_elements(By.CLASS_NAME, 'hz-Listing-coverLink')
if link_element:
    # 用JS读取元素的href属性
    link = artikel.execute_script("return arguments[0].href", link_element[0])
else:
    # 备选:查找包含商品详情路径的a标签
    alt_links = artikel.find_elements(By.XPATH, ".//a[contains(@href, '/v/')]")
    link = alt_links[0].get_attribute('href') if alt_links else '无有效链接'

方案2:等待href属性加载完成

使用显式等待确保链接元素的href属性已赋值,替代无效的time.sleep():

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def loop_artikelen():
    artikelen = driver.find_elements(By.XPATH, "//*[@id='content']/div[2]/ul/li")
    artikelen_lijst = []
    wait = WebDriverWait(driver, 10)
    for artikel in artikelen[0:15]:
        titel = artikel.find_element(By.CLASS_NAME, 'hz-Listing-title').text
        prijs = artikel.find_element(By.CLASS_NAME, 'hz-Listing-price').text
        
        # 等待链接元素出现,且href属性非空
        link_element = wait.until(
            lambda d: d.find_element(By.CLASS_NAME, 'hz-Listing-coverLink').get_attribute('href') is not None
        )
        link = link_element.get_attribute('href')
        
        artikelen_lijst.append((titel, prijs, link))
    return artikelen_lijst

方案3:遍历商品元素下的所有有效链接

针对部分商品链接结构不同的情况,遍历所有a标签并筛选符合商品详情页规则的链接:

def loop_artikelen():
    artikelen = driver.find_elements(By.XPATH, "//*[@id='content']/div[2]/ul/li")
    artikelen_lijst = []
    for artikel in artikelen[0:15]:
        titel = artikel.find_element(By.CLASS_NAME, 'hz-Listing-title').text
        prijs = artikel.find_element(By.CLASS_NAME, 'hz-Listing-price').text
        
        link = None
        # 遍历当前商品下所有a标签
        all_a_tags = artikel.find_elements(By.TAG_NAME, 'a')
        for tag in all_a_tags:
            href = tag.get_attribute('href')
            # 筛选包含商品详情路径的链接
            if href and '/v/' in href and 'marktplaats.nl' in href:
                link = href
                break
        
        artikelen_lijst.append((titel, prijs, link if link else '无有效链接'))
    return artikelen_lijst

额外建议

  • 避免使用固定层级的XPATH(如//*[@id='content']/div[2]/ul/li),改用更稳定的类名定位,比如By.CLASS_NAME, 'hz-Listing-item'(如果页面存在该类)
  • 全程使用显式等待替代强制休眠,提升代码稳定性与执行效率

内容的提问来源于stack exchange,提问作者okanmutluprogramming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:20:33