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

使用Python实现网站Google账号自动登录以完成数据下载

Google账号自动登录并下载数据的Python实现方案

方案一:OAuth 2.0官方授权(推荐,长期稳定)

多数支持Google登录的网站都兼容OAuth2协议,这是合规且不易触发反爬的方案,适合定期自动化任务。

步骤:

  1. 前往Google Cloud Console创建项目,注册桌面应用类型的OAuth客户端ID,下载生成的credentials.json文件到脚本目录。
  2. 安装依赖:
pip install google-auth google-auth-oauthlib google-auth-httplib2 requests
  1. 示例代码(首次手动授权后,后续自动复用凭据):
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
import pickle
import os
import requests

# 按需调整权限范围,基础范围覆盖多数网站登录需求
SCOPES = ['openid', 'email', 'profile']

def get_google_credentials():
    creds = None
    # 保存登录凭据的文件,首次授权后自动生成
    token_path = 'token.pickle'
    if os.path.exists(token_path):
        with open(token_path, 'rb') as token:
            creds = pickle.load(token)
    # 刷新或重新获取凭据
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # 保存凭据供后续自动使用
        with open(token_path, 'wb') as token:
            pickle.dump(creds, token)
    return creds

def download_target_data(url, creds):
    access_token = creds.token
    # 按目标网站要求构造授权请求头,多数网站支持Bearer令牌格式
    headers = {'Authorization': f'Bearer {access_token}'}
    response = requests.get(url, headers=headers)
    response.raise_for_status()
    # 保存下载的数据,文件名按需修改
    with open('downloaded_data.csv', 'wb') as f:
        f.write(response.content)
    print("数据下载完成")

if __name__ == '__main__':
    target_download_url = "替换为你的数据下载URL"
    creds = get_google_credentials()
    download_target_data(target_download_url, creds)

首次运行会弹出浏览器引导你完成Google账号授权,之后脚本会自动复用token.pickle里的凭据,无需手动干预。

方案二:浏览器自动化(快速实现,短期场景)

若目标网站不支持OAuth2,可通过模拟浏览器操作实现自动登录,适合快速验证需求,但存在反爬检测风险。

示例(用Playwright,稳定性优于Selenium):

  1. 安装依赖:
pip install playwright
playwright install chrome
  1. 示例代码(首次手动处理两步验证后,后续自动复用登录状态):
from playwright.sync_api import sync_playwright
import os
import time

def auto_login_download():
    with sync_playwright() as p:
        # 首次运行设为headless=False查看界面,稳定后改为True后台运行
        browser = p.chromium.launch(headless=False)
        # 加载保存的登录状态,无需重复登录
        context = browser.new_context(storage_state="auth_state.json")
        page = context.new_page()
        
        try:
            page.goto("替换为目标网站首页URL")
            # 判断是否已登录
            if not page.is_visible('text="Google登录"'):
                page.goto("替换为数据下载URL")
                time.sleep(5)  # 按需调整等待时间,或用元素等待替代
                print("数据下载完成")
                return
            
            # 未登录时触发Google登录流程
            page.click('text="Google登录"')
            popup = page.wait_for_event("popup")
            # 输入Google账号,建议用环境变量替代硬编码
            popup.fill('input[type="email"]', os.getenv("GOOGLE_EMAIL"))
            popup.click('text="下一步"')
            popup.wait_for_load_state()
            # 输入密码,同样建议用环境变量
            popup.fill('input[type="password"]', os.getenv("GOOGLE_PASSWORD"))
            popup.click('text="下一步"')
            # 首次运行需手动处理两步验证,之后状态会被保存
            popup.wait_for_load_state()
            page.wait_for_load_state()
            # 保存登录状态供后续使用
            context.storage_state(path="auth_state.json")
            # 跳转下载数据
            page.goto("替换为数据下载URL")
            time.sleep(5)
            print("数据下载完成")
        finally:
            browser.close()

if __name__ == '__main__':
    # 提前在系统环境变量中设置GOOGLE_EMAIL和GOOGLE_PASSWORD
    auto_login_download()

关键注意事项

  • 安全性:禁止硬编码账号密码,优先使用环境变量或加密存储;OAuth2方案的credentials.json和token.pickle不要随意分享。
  • 反爬风险:浏览器自动化可能被网站检测到,导致账号受限,长期任务优先选OAuth2方案。
  • 定时任务:可通过Linux的crontab或Windows任务计划,定期执行脚本实现自动下载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:30:58