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

Selenium爬虫本地化设置失效求助:循环查询需重复配置

解决Castorama.pl爬虫本地化设置失效问题

我用Python Selenium编写了一款简易网络爬虫,通过包含EAN码的Excel文件在Castorama.pl网站搜索产品并获取价格。首次启动浏览器时,Cookie授权与店铺本地化设置流程运行正常;但使用带循环的getdata函数执行搜索时,本地化设置会失效,每次查询都需重新配置,恳请提供解决思路。

初始化代码

driver.get("https://www.castorama.pl")
driver.switch_to.frame(driver.find_element(By.CLASS_NAME, "truste_popframe"))
time.sleep(1)
accept = driver.find_element(By.CLASS_NAME, "call").click()
driver.switch_to.default_content()
postcode = driver.find_element(By.CLASS_NAME, "_1a41e483").send_keys("38-500")
time.sleep(1)
submit_postcode = driver.find_element(By.XPATH, "//span[normalize-space()='Dodaj']").click()
results = []

查询函数代码

def getdata(symbol):
    driver.get(f"https://www.castorama.pl/search?term={symbol}")
  
    name = WebDriverWait(driver,2).until(
        EC.presence_of_element_located((By.ID, "product-title"))
        )
    price = WebDriverWait(driver,2).until(
        EC.presence_of_element_located((By.CLASS_NAME, "_5d34bd7a"))
        )
    records = {
      'ean': symbol,
      'cena': price.text,
      'name': name.text
    }
    
    return records

解决思路

1. 保存并复用会话Cookie

初始化完成Cookie授权和本地化设置后,将当前浏览器的Cookie保存下来,每次调用getdata函数时先加载这些Cookie,让网站识别为已完成设置的会话:

# 初始化完成后保存Cookie
cookies = driver.get_cookies()

# 修改后的getdata函数
def getdata(symbol):
    # 先访问网站主页,确保Cookie域名匹配
    driver.get("https://www.castorama.pl")
    # 加载保存的Cookie
    for cookie in cookies:
        driver.add_cookie(cookie)
    # 再跳转搜索页面
    driver.get(f"https://www.castorama.pl/search?term={symbol}")
  
    name = WebDriverWait(driver,2).until(
        EC.presence_of_element_located((By.ID, "product-title"))
        )
    price = WebDriverWait(driver,2).until(
        EC.presence_of_element_located((By.CLASS_NAME, "_5d34bd7a"))
        )
    records = {
      'ean': symbol,
      'cena': price.text,
      'name': name.text
    }
    
    return records

注意:加载Cookie前必须先访问目标域名下的页面,否则Cookie无法成功添加。

2. 改用站内搜索提交,避免直接跳转URL

不要直接用driver.get访问搜索链接,而是在初始化后的页面中找到搜索框,输入EAN码并提交搜索,全程保持在同一个会话中:

from selenium.webdriver.common.keys import Keys

def getdata(symbol):
    # 等待搜索框加载并输入EAN码(替换为实际搜索框的定位符)
    search_box = WebDriverWait(driver, 5).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "搜索框的CSS选择器"))
    )
    search_box.clear()
    search_box.send_keys(symbol)
    # 提交搜索
    search_box.send_keys(Keys.ENTER)
  
    name = WebDriverWait(driver,2).until(
        EC.presence_of_element_located((By.ID, "product-title"))
        )
    price = WebDriverWait(driver,2).until(
        EC.presence_of_element_located((By.CLASS_NAME, "_5d34bd7a"))
        )
    records = {
      'ean': symbol,
      'cena': price.text,
      'name': name.text
    }
    
    return records

这种方式能确保会话状态不丢失,本地化设置会一直有效。

3. 兜底:检查会话状态并重新配置

如果前两种方法无效,可以在getdata函数开头检查页面是否还保留本地化设置(比如是否显示已设置的店铺地址),若未保留则重新执行本地化步骤。但这种方式效率较低,仅作为备选方案。

内容的提问来源于stack exchange,提问作者Łukasz Tarnowski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:15:08