配置外部Google Drive程序化访问遇卡点,求指导(Win10无管理员权限)
解决Google Drive程序化访问配置的问题
别担心,这个配置确实容易卡壳,我来一步步帮你捋清楚,尤其是针对无管理员权限的Windows 10环境。
第一步:搞定同意屏幕(Consent Screen)的填写
你卡在这一步太正常了,Google的提示确实有点模糊,尤其是个人非G Suite用户的场景,按下面的逻辑填就行:
- 应用名称:随便填个辨识度高的名字,比如「我的Drive批量下载工具」,不用和官方名称挂钩,自己能认出来就好。
- 用户支持邮箱:填你自己的Google账号邮箱即可。
- 开发者联系信息:同样填你的Google邮箱,这部分是Google用来联系你的,不会展示给其他用户。
- 范围(Scopes):如果你只是批量下载文件,选
../auth/drive.readonly就足够了,别选过高权限,避免后续不必要的审核麻烦。 - 测试用户:因为你是个人账号(无管理员权限),只能选「外部」类型,一定要把你自己的Google邮箱添加到测试用户列表里——这一步是关键,不然你的应用没法正常使用。
- 其他选项(比如应用logo、隐私政策链接):如果只是自己用,完全可以留空跳过。
填完这些保存,就能继续下一步创建凭据了。
第二步:更简便的配置方式(适配无管理员权限Win10)
其实不用跟着复杂的指南绕弯路,有个专门针对桌面端批量操作的省心方法:
- 打开Google Cloud Console,创建一个新项目(随便命名,比如「Drive批量下载项目」)。
- 搜索并启用「Google Drive API」。
- 进入「凭据」页面,点击「创建凭据」→「OAuth客户端ID」。
- 应用类型选「桌面应用」,名称随便填,然后点击创建。
- 下载生成的
credentials.json文件,把它放到你的Python项目文件夹里。
接下来用google-api-python-client库实现批量下载,参考代码如下:
from googleapiclient.discovery import build from googleapiclient.http import MediaIoBaseDownload from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow import io import os # 权限范围,只读权限足够满足下载需求 SCOPES = ['https://www.googleapis.com/auth/drive.readonly'] def main(): creds = None # token.json会自动生成,用来存储你的登录授权信息 if os.path.exists('token.json'): creds = Credentials.from_authorized_user_file('token.json', SCOPES) # 没有有效凭据时,触发登录授权流程 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.json', 'w') as token: token.write(creds.to_json()) # 初始化Drive服务 service = build('drive', 'v3', credentials=creds) # 替换成合作方共享给你的文件夹ID folder_id = '你的共享文件夹ID' # 查询文件夹下的所有文件 results = service.files().list( q=f"'{folder_id}' in parents", fields="nextPageToken, files(id, name)").execute() items = results.get('files', []) if not items: print('未找到任何文件。') else: print('开始批量下载文件:') for item in items: print(f"正在下载:{item['name']}") # 发起下载请求 request = service.files().get_media(fileId=item['id']) fh = io.FileIO(item['name'], 'wb') downloader = MediaIoBaseDownload(fh, request) done = False while done is False: status, done = downloader.next_chunk() print(f"下载进度:{int(status.progress() * 100)}%") if __name__ == '__main__': main()
针对无管理员权限Win10的注意事项
- 无需安装任何需要管理员权限的软件,直接用pip安装依赖库:
pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib - 第一次运行代码时,会自动弹出浏览器让你登录授权——因为你之前已经把自己加为测试用户,所以不会出现权限报错。
- 共享文件夹ID获取方式:打开合作方共享的文件夹,浏览器地址栏中
folders/后面的一串字符就是文件夹ID,替换到代码里的folder_id位置即可。 - 如果只需要下载单个文件,直接把代码中的文件夹查询逻辑替换成指定文件ID的下载请求就行。
内容的提问来源于stack exchange,提问作者I Z
相关产品推荐
相关产品推荐

