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

Python Selenium爬取Lowes遇价格位置锁定,求解决方案

解决Lowes网站Selenium爬取价格时显示“Select store for availability”的问题

以下是几种可行的解决方案,可直接整合到你的现有脚本中:

方案1:通过URL参数指定门店

Lowes支持在商品URL后追加门店ID参数直接锁定门店,避免触发位置选择提示:

  1. 在普通浏览器中选好一个门店,查看URL中是否包含storeId参数(比如storeId=1070),复制该有效ID
  2. 修改脚本,在请求商品URL时拼接该参数:
from selenium import webdriver

# 初始化浏览器,添加反检测配置
options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
driver = webdriver.Chrome(options=options)

# 拼接门店ID到目标商品URL
base_product_url = "https://www.lowes.com/pd/Your-Target-Product-URL"
target_store_id = "1070"  # 替换为你找到的有效门店ID
final_url = f"{base_product_url}?storeId={target_store_id}"

driver.get(final_url)

# 后续爬取SKU、描述、价格的代码...

方案2:模拟手动选择门店的流程

如果URL参数无效,直接模拟用户选择门店的完整操作:

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

options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
driver = webdriver.Chrome(options=options)

# 先打开Lowes首页完成门店选择
driver.get("https://www.lowes.com/")

try:
    # 等待并点击门店选择按钮(元素选择器需根据页面实际调整)
    store_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "button.store-selector"))
    )
    store_btn.click()

    # 输入有效邮编(比如90210)
    zip_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "zipCode"))
    )
    zip_input.send_keys("90210")

    # 提交邮编搜索门店
    submit_btn = driver.find_element(By.CSS_SELECTOR, "button[type='submit']")
    submit_btn.click()

    # 选择第一个推荐的门店
    first_store = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "div.store-item:first-child button"))
    )
    first_store.click()

    # 等待门店设置生效
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "span.current-store"))
    )
except Exception as e:
    print(f"门店选择失败: {e}")

# 打开目标商品页面,此时应能正常显示价格
driver.get("https://www.lowes.com/pd/Your-Target-Product-URL")

# 爬取价格示例
try:
    price = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "span.price-value"))
    ).text
    print(f"商品价格: {price}")
except Exception as e:
    print(f"获取价格失败: {e}")

# 后续爬取SKU、描述的代码...

方案3:复用已选门店的Cookie

  1. 在普通浏览器中登录Lowes并选好门店,打开开发者工具(F12)→ Application → Cookies,复制所有相关Cookie
  2. 在脚本中加载这些Cookie,跳过门店选择步骤:
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
driver = webdriver.Chrome(options=options)

# 先打开Lowes首页,再添加Cookie
driver.get("https://www.lowes.com/")

# 替换为你复制的Cookie列表
saved_cookies = [
    {"name": "storeId", "value": "1070", "domain": ".lowes.com"},
    {"name": "zipCode", "value": "90210", "domain": ".lowes.com"},
    # 其他必要Cookie(比如session类Cookie)...
]

for cookie in saved_cookies:
    driver.add_cookie(cookie)

# 刷新页面使Cookie生效
driver.refresh()

# 打开目标商品页面爬取价格
driver.get("https://www.lowes.com/pd/Your-Target-Product-URL")

# 后续爬取代码...

额外注意事项

  • 确保Selenium版本与浏览器版本匹配,避免兼容性问题
  • 统一使用WebDriverWait等待元素加载,不要用time.sleep()硬等待
  • 定期更换User-Agent,降低被网站识别为爬虫的概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:47:37