Python Selenium爬取Lowes遇价格位置锁定,求解决方案
解决Lowes网站Selenium爬取价格时显示“Select store for availability”的问题
以下是几种可行的解决方案,可直接整合到你的现有脚本中:
方案1:通过URL参数指定门店
Lowes支持在商品URL后追加门店ID参数直接锁定门店,避免触发位置选择提示:
- 在普通浏览器中选好一个门店,查看URL中是否包含
storeId参数(比如storeId=1070),复制该有效ID - 修改脚本,在请求商品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
- 在普通浏览器中登录Lowes并选好门店,打开开发者工具(F12)→ Application → Cookies,复制所有相关Cookie
- 在脚本中加载这些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
相关产品推荐
相关产品推荐

