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

如何用wget获取Google购物列表以适配热敏打印机打印?

解决谷歌购物列表抓取与格式化问题

首先得说清楚:用wget直接带用户名密码的方式根本行不通——谷歌的购物列表页面是动态渲染的,而且登录系统用的是OAuth2认证,完全不支持传统的HTTP Basic Auth,所以wget --user --password参数只会让你被重定向到登录页面,拿不到实际的列表内容。

下面给你两个可行的自动化抓取方案,都是用Python实现,能直接输出你需要的列表格式:


方案一:用Selenium模拟浏览器抓取

Selenium是老牌的浏览器自动化工具,适合这种需要登录的动态页面抓取。

步骤1:安装依赖

先安装Selenium和对应浏览器的驱动(以Chrome为例):

pip install selenium

然后下载和你Chrome版本匹配的ChromeDriver,放到脚本同目录或者系统可识别的PATH路径里。

步骤2:Python脚本

这个脚本第一次运行需要手动登录一次,之后会保存cookie,后续就能自动抓取了:

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
import pickle

# 初始化Chrome浏览器
driver = webdriver.Chrome()

try:
    driver.get("https://shoppinglist.google.com")
    
    # 尝试加载已保存的cookie,避免重复登录
    try:
        cookies = pickle.load(open("google_cookies.pkl", "rb"))
        for cookie in cookies:
            driver.add_cookie(cookie)
        driver.refresh()
    except FileNotFoundError:
        # 第一次运行,手动完成登录后按回车
        input("请在弹出的浏览器中完成谷歌登录,登录成功后按回车继续...")
        # 保存cookie到本地
        pickle.dump(driver.get_cookies(), open("google_cookies.pkl", "wb"))

    # 等待购物列表加载完成(这里的CSS选择器可能需要根据页面更新调整)
    wait = WebDriverWait(driver, 10)
    item_elements = wait.until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div[role='listitem'] div[aria-label]"))
    )

    # 提取并格式化列表项
    shopping_list = []
    for elem in item_elements:
        # 去掉备注等多余内容,只保留商品名称
        item_name = elem.get_attribute("aria-label").split(" · ")[0]
        shopping_list.append(f"- {item_name}")

    # 输出你需要的格式
    print("\n".join(shopping_list))

finally:
    # 关闭浏览器
    driver.quit()

方案二:用Playwright(更简洁,自动管理驱动)

Playwright是微软推出的新一代自动化工具,不用手动下载浏览器驱动,用起来更省心。

步骤1:安装依赖

pip install playwright
playwright install chrome

步骤2:Python脚本

逻辑和Selenium类似,但代码更简洁:

from playwright.sync_api import sync_playwright
import pickle

with sync_playwright() as p:
    # 第一次运行设为headless=False,方便手动登录;之后可以改成True后台运行
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()

    try:
        page.goto("https://shoppinglist.google.com")
        
        # 加载已保存的cookie
        try:
            cookies = pickle.load(open("google_cookies.pkl", "rb"))
            page.context.add_cookies(cookies)
            page.reload()
        except FileNotFoundError:
            input("登录完成后按回车继续...")
            pickle.dump(page.context.cookies(), open("google_cookies.pkl", "wb"))

        # 等待列表元素加载
        page.wait_for_selector("div[role='listitem'] div[aria-label]")
        item_elements = page.query_selector_all("div[role='listitem'] div[aria-label]")

        # 生成目标格式的列表
        shopping_list = [f"- {elem.get_attribute('aria-label').split(' · ')[0]}" for elem in item_elements]
        print("\n".join(shopping_list))

    finally:
        browser.close()

关键注意事项

  1. CSS选择器调整:谷歌的页面可能会更新,如果脚本找不到元素,需要打开购物列表页面的开发者工具,重新定位列表项的CSS选择器。
  2. cookie有效期:谷歌的cookie可能会过期,如果之后脚本又跳转到登录页,删除google_cookies.pkl重新登录一次即可。
  3. 后台运行:如果要把脚本加入定时任务,把浏览器设为无头模式(Selenium里加options.add_argument("--headless=new"),Playwright里把headless=False改成True)。

抓取后的内容可以直接传给你的打印脚本,或者保存到临时文件再读取打印。

内容的提问来源于stack exchange,提问作者edwards.gavin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:04:56