python - Issues Accessing Gmail API in WSL2 - Stack Overflow

admin2025-04-28  2

I've been trying to access the Gmail API and followed all the steps available in the API documentation. However, I suspect the issue lies in running the script on WSL2. I supposed no browser interaction would be required when using the API.

When I run the script, the following appears: Terminal

After entering my credentials and hitting "Next," this is what I see:

Google

Couldn't sign you in

The browser you're using doesn't support JavaScript, or has JavaScript turned off.

The keep your Google Account secure, try signing in on a browser that has JavaScript turned on. Learn more

Terminal after hitting 'next'

There is also a 'failed' message followed by a big link, above the 'sign in' part.

Has anyone else encountered this issue?


Script:

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 = [".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()

转载请注明原文地址:http://anycun.com/QandA/1745854748a91265.html