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

Selenium ChromeDriver无头模式报NoneType无属性错误且运行慢如何解决

解决方案

问题原因

  1. 你使用的是旧版Chrome无头模式,UA、浏览器特征和正常模式差异极大,很容易被Costco的反爬策略识别,返回拦截页面而非正常商品内容,导致你要找的a标签不存在,触发AttributeError。
  2. 硬等待time.sleep(0.2)不可靠,且旧无头模式本身性能差,导致运行速度慢。

修复步骤

  • 替换旧无头模式为Chrome新版无头模式,性能和正常模式几乎一致,特征也更接近普通浏览器
  • 添加反识别参数,隐藏Selenium自动化特征,避免被反爬拦截
  • 替换硬等待为显式等待,确保元素加载完成后再解析,同时避免不必要的等待时间提升速度
  • 对获取的标签添加非空判断,避免异常报错
  • 可选添加禁用图片、不必要插件的参数,进一步提升加载速度

修改后完整代码

from bs4 import BeautifulSoup
from selenium import webdriver 
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

chrome_options = Options()
# 替换为新版无头模式,性能和特征接近普通浏览器
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument("--start-maximized")
# 反爬相关参数
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option("useAutomationExtension", False)
# 提升速度的可选参数
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--blink-settings=imagesEnabled=false") # 不需要加载图片可以保留,不需要就删掉这行
# 替换UA,避免默认无头UA被识别
chrome_options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36")

driver = webdriver.Chrome(executable_path='/Users/sarathc/Desktop/costco/chromedriver', options=chrome_options)
# 隐藏webdriver标识
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})

def listResponse(url):
    driver.get(url)
    # 显式等待目标类别的div加载完成,最多等10秒,加载完成立刻继续
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "div.category-node.ng-star-inserted"))
    )
    soup = BeautifulSoup(driver.page_source,"html.parser")
    return soup

soup = listResponse("https://www.costco.com.au/Smart-TVs-Audio-Cameras/c/cos_21")

cat =  soup.find_all("div", {"class": ["category-node ng-star-inserted"]})

for sk in cat:
    a_tag = sk.find("a")
    # 非空判断避免报错
    if a_tag:
        print(a_tag.get("href"))

# 用完记得关闭driver释放资源
driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:27:00