Hướng dẫn python get token - python lấy mã thông báo

Chào các bạn, hôm nay mình xin chia sẻ đoạn code sử dụng google api kết hợp với selenium dùng để tự động lấy access token, refresh access token dành cho các công việc với google API.

Cụ thể bài này mình sẽ lấy access token sử dụng cho gmail nhé :") . Nếu lấy sử dụng cho youtube hay sản phẩm khác của google thì ta đọc bài đó.

Chuẩn bị : Pyhon 3.6.x, Pycharm, UDF của Google API, Selenium và một số thư viện khác.

Trước tiên kiểm tra bạn đã có bộ thư viện chưa, nếu chưa có các bạn có thể cài như sau, mở CMD bằng quyền admin gõ ::

- Cài đặt Google API ::

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

- Cài đặt Selenium ::

pip install selenium

-> OKE. Ta bắt tay vào code nào . Trước hết các bạn import các thư viện vào như sau ::

from time import sleep
from oauth2client.client import flow_from_clientsecrets
from oauth2client import file
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
import re

Giờ ta sẽ viết full code nhé, tớ sẽ copy nguyên đoạn code và chỉ rõ tùng dòng tại sao lại viết thế :D, các bạn theo sườn bài viết là được. Ở đây, tớ xin giải thích cái hàm GetExCode trước, vì sao lại có hàm này, hàm này là dùng để lấy đoạn code exchange từ file client secrect để lấy được access_token nhé. Vi muốn tự động nên code này tớ đã kết hợp với selenium để tự động đăng nhập lấy code rồi tự điền vào thôi.
Ở đây, tớ xin giải thích cái hàm GetExCode trước, vì sao lại có hàm này, hàm này là dùng để lấy đoạn code exchange từ file client secrect để lấy được access_token nhé. Vi muốn tự động nên code này tớ đã kết hợp với selenium để tự động đăng nhập lấy code rồi tự điền vào thôi.

from time import sleep
from oauth2client.client import flow_from_clientsecrets
from oauth2client import file
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
import re

def GetExCode(gg_user, gg_pass, link_oauth):
    ExChangeCode = ''
    options = webdriver.ChromeOptions() #Tạo option cho việc khởi động chrome
    options.add_argument('headless')  # option này sẽ giấu cái chrome của chúng ta đi
    options.add_argument('window-size=1920x1080')  # không hiện lên màn hình nữa
    options.add_argument("disable-gpu")  #...
    MeoChrome = webdriver.Chrome('chromedriver', chrome_options=options) #Khai báo mở chrome mới, với option vừa đc đặt ra ở trên
    MeoChrome.get(link_oauth) #chạy link để get access token với chrome vừa tạo ở trên
    delay = 3  # seconds
    try:
        WebDriverWait(MeoChrome, delay).until(EC.presence_of_element_located((By.ID, 'identifierId'))) #delay web 3 giây nếu chưa tìm thấy element có ID là : identifierId, nếu k thấy nó sẽ nhảy xuống báo lỗi dòng expect bên dưới, còn thấy nó sẽ xuống dòng tiếp
        MeoChrome.find_element_by_id('identifierId').send_keys(gg_user) #send username vào
        MeoChrome.find_element_by_id('identifierNext').click() #click nút tiếp
        WebDriverWait(MeoChrome, delay).until(EC.presence_of_element_located((By.NAME, 'password'))) #delay 3s nếu chưa tìm thấy element có Name là password
        sleep(1) # dừng lại 1s
        MeoChrome.find_element_by_name('password').send_keys(gg_pass) #gửi pass vào
        sleep(1) # dừng lại 1s
        MeoChrome.find_element_by_id('passwordNext').click() #click nút đăng nhập tiếp
        sleep(1) # dừng lại 1s
        MeoChrome.find_element_by_id('submit_approve_access').click() #click vào nút cấp quyền
        sleep(3) # dừng lại 3s
        ExChangeCode = re.findall('', MeoChrome.page_source)[0] # lấy page sources, lọc ra exchange code
        MeoChrome.close() # đóng chrome
        MeoChrome.quit() # xóa chrome
    except TimeoutException:
        print("Loading took too much time!")
    return ExChangeCode

#code flow dưới đây sẽ trả về cho chúng ta đoạn link để lấy được exchange code
flow = flow_from_clientsecrets('client_secret.json',
                               scope='https://mail.google.com/',
                               redirect_uri='urn:ietf:wg:oauth:2.0:oob') #khai báo thông số cần thiết
link_oauth = flow.step1_get_authorize_url() #lấy link exchange code
exCode = GetExCode('user', 'pass', link_oauth) #chạy hàm để lấy được exchange code tự động
print(exCode) #xem exchange code 
credentials = flow.step2_exchange(exCode) #nhập exchange code và chuyển thành credentials
store = file.Storage('token1.json') #tạo file lưu access token
store.put(credentials) #lưu
#kết thúc, bài tiếp theo tớ sẽ hướng dẫn sử dụng access token này để làm gì