WSL2环境调用Gmail API时OAuth登录提示浏览器不支持JavaScript的问题求助
WSL2环境调用Gmail API时OAuth登录提示浏览器不支持JavaScript的问题求助
我最近在尝试调用Gmail API,已经严格按照官方文档的步骤操作了,但怀疑问题出在WSL2环境运行脚本这件事上。原本我以为使用API的时候不需要浏览器交互,结果实际运行时遇到了麻烦。
运行脚本后,终端里会出现登录相关的提示,当我输入账号凭证并点击“Next”后,就弹出了下面这个错误:
Couldn't sign you in
The browser you're using doesn't support JavaScript, or has JavaScript turned off.
To keep your Google Account secure, try signing in on a browser that has JavaScript turned on. Learn more
在这个登录提示的上方,还有一个“failed”提示和一串很长的链接。
有没有其他同学在WSL2里遇到过同样的问题呀?
我使用的脚本代码:
import os.path from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build from googleapiclient.errors import HttpError # If modifying these scopes, delete the file token.json. SCOPES = ["https://www.googleapis.com/auth/gmail.readonly"] def main(): """Shows basic usage of the Gmail API. Lists the user's Gmail labels. """ creds = None # The file token.json stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists("token.json"): creds = Credentials.from_authorized_user_file("token.json", SCOPES) # If there are no (valid) credentials available, let the user log in. 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) # Save the credentials for the next run with open("token.json", "w") as token: token.write(creds.to_json()) try: service = build("gmail", "v1", credentials=creds) results = service.users().labels().list(userId="me").execute() labels = results.get("labels", []) if not labels: print("No labels found.") return print("Labels:") for label in labels: print(label["name"]) except HttpError as error: # TODO(developer) - Handle errors from gmail API. print(f"An error occurred: {error}") if __name__ == "__main__": main()
备注:内容来源于stack exchange,提问作者Ian Aragao




