| BUỔI 13: ADVANCED FILE OPERATIONS — “NGƯỜI GÁC CỔNG” THƯ MỤC TỰ ĐỘNG

Được viết bởi thanhdt vào ngày 24/03/2026 lúc 23:08 | 114 lượt xem

Bạn muốn mỗi khi có ai đó thả một file Excel vào thư mục “Dữ liệu thô”, máy tính sẽ tự động dọn dẹp nó rồi gửi email báo cáo cho sếp? Hôm nay, chúng ta sẽ học cách dùng thư viện Watchdog để biến Python thành một người canh gác thư mục 24/7.


1️⃣ Thư Viện Watchdog & Sự Kiện File

Python có thể lắng nghe các sự kiện: Tạo mới (Created), Chỉnh sửa (Modified), Di chuyển (Moved) hoặc Xóa (Deleted) của bất kỳ tệp tin nào trong máy.


2️⃣ Kích Hoạt Workflow Tự Động (Triggers)

Mỗi khi có file mới, chúng ta sẽ kích hoạt (trigger) các hàm xử lý dữ liệu đã học ở Module trước. Đây là cách bạn tạo ra một “dây chuyền sản xuất” dữ liệu khép kín.


3️⃣ Lập Lịch Chạy Định Kỳ (Scheduling)

Ngoài việc chờ file, bạn cũng có thể cài đặt để Python tự chạy vào 8h sáng hàng ngày thông qua Task Scheduler (Windows) hoặc thư viện schedule của Python.

import schedule
import time

def job():
    print("Đang quét dữ liệu báo cáo sáng...")

schedule.every().day.at("08:00").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

TỔNG KẾT BUỔI 13

Chúc mừng bạn đã hoàn thành Module 4! Môi trường làm việc của bạn hiện đã được tối ưu hóa tối đa. Ở Module cuối cùng, chúng ta sẽ đến với công nghệ tương lai: Playwright — thế hệ kế thừa của Selenium để lấy dữ liệu web hiện đại!


🏗️ Xây dựng tương lai tự động tại: Hướng nghiệp Python – Automation

| BUỔI 11: FILE PROCESSING AUTOMATION — GIẢI PHÓNG ÁP LỰC VĂN PHÒNG

Được viết bởi thanhdt vào ngày 24/03/2026 lúc 23:07 | 87 lượt xem

Chào mừng bạn đến với Module 4! Nếu công việc hàng ngày của bạn ngập trong Excel, PDF và Word, thì buổi học hôm nay sẽ giúp bạn tiết kiệm hàng giờ mỗi tuần. Chúng ta sẽ dùng Python để đọc, viết và xử lý hàng loạt tệp tin chỉ bằng một cú click chuột.


1️⃣ Tự Động Hóa Excel Với Openpyxl & Pandas

Không cần mở Excel, bạn có thể tự động tính toán, tạo định dạng màu sắc (Conditional Formatting) hay gộp 100 file Excel thành 1 báo cáo duy nhất trong chớp mắt.

[!IMPORTANT]
🚀 Lộ trình Automation văn phòng: Hướng nghiệp Python


2️⃣ Làm Việc Với PDF (Trích Xuất & Gộp File)

Sử dụng thư viện PyPDF2 hoặc pdfplumber giúp bạn tự động trích xuất nội dung từ hóa đơn PDF hoặc gộp nhiều file tài liệu lại với nhau mà không cần mua phần mềm trả phí.


3️⃣ Tạo Văn Bản Word Tự Động

Thay vì ngồi sửa tên khách hàng trên 100 hợp đồng khác nhau, hãy tạo một Template và để Python tự động điền thông tin và tạo ra 100 file Word chuyên nghiệp chỉ trong 1 giây.


TỔNG KẾT BUỔI 11

Tự động hóa file là kỹ năng thực tế nhất để nâng cao năng suất cá nhân. Từ nay, bạn sẽ không còn sợ hãi trước những đống tài liệu khổng lồ nữa. Ở buổi tiếp theo, chúng ta sẽ học cách gửi hàng loạt tệp tin này qua Email hoàn toàn tự động!


📂 Quản lý tệp tin thông minh tại: Hướng nghiệp Python – Automation

| BUỔI 10: API TESTING VÀ WORKFLOWS — CHUỖI TỰ ĐỘNG HÓA THÔNG MINH

Được viết bởi thanhdt vào ngày 24/03/2026 lúc 23:06 | 80 lượt xem

Chào mừng bạn đến với bài học cuối cùng của Module API! Hôm nay chúng ta sẽ nâng tầm Automation bằng cách học cách Chaining (Chuỗi): lấy kết quả từ API này làm đầu vào cho API kia, và thiết lập cơ chế tự động thử lại (Retry) khi mạng chập chờn.


1️⃣ Xác Thực Phản Hồi (Response Validation)

Đừng chỉ tin vào Status Code, hãy học cách kiểm tra xem nội dung JSON trả về có đúng cấu trúc và dữ liệu bạn mong đợi hay không. Đây là nền tảng của API Testing.


2️⃣ Liên Kết Các API (Chaining API Calls)

Ví dụ: API 1 lấy danh sách ID khách hàng -> API 2 dùng ID đó để lấy số điện thoại -> API 3 tự động gửi tin nhắn. Đây là quy trình tự động hóa chuyên nghiệp!


3️⃣ Cơ Chế Retry & Rate Limiting

Học cách “lịch sự” khi gọi API để không bị chặn (Rate Limiting) và cách tự động gọi lại 3-5 lần nếu lần đầu thất bại do mạng lag.

from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)

session.get(url)

TỔNG KẾT BUỔI 10

Bạn đã chính thức làm chủ thế giới API Automation. Giờ đây, không có rào cản nào có thể ngăn cản bạn kết nối và xử lý dữ liệu giữa các hệ thống khác nhau. Ở Module 4, chúng ta sẽ học cách xử lý các tệp tin Excel, PDFEmail tự động để giải phóng đôi tay khỏi các công việc văn phòng!


🏆 Làm chủ quy trình hiện đại tại: Hướng nghiệp Python – Automation

| BUỔI 9: REQUESTS LIBRARY MASTERY — LÀM CHỦ CÁC CUỘC GỌI API CHUYÊN NGHIỆP

Được viết bởi thanhdt vào ngày 24/03/2026 lúc 23:05 | 81 lượt xem

Ở buổi trước chúng ta đã học lý thuyết, hôm nay sẽ là thực hành đỉnh cao. Chúng ta sẽ sử dụng thư viện Requests để thực hiện các yêu cầu phức tạp hơn: cần mật khẩu (Authentication), gửi kèm tham số (Parameters) và xử lý khi API gặp lỗi.


1️⃣ Gửi Dữ Liệu Qua Headers & Parameters

Tham số giúp bạn lọc dữ liệu ngay từ phía máy chủ (ví dụ: chỉ lấy dữ liệu của ngày hôm nay).

import requests

params = {'q': 'python automation', 'page': 2}
headers = {'Authorization': 'Bearer YOUR_TOKEN_HERE'}

response = requests.get("https://api.example.com/search", params=params, headers=headers)
data = response.json()

2️⃣ Xử Lý Lỗi API & Status Codes

Một chuyên gia Automation luôn phải kiểm tra mã trạng thái (Status Code) để biết yêu cầu có thành công hay không:

  • 200/201: Thành công rực rỡ!
  • 401/403: Lỗi bảo mật, không đủ quyền truy cập.
  • 404: Không tìm thấy địa chỉ (URL sai).
  • 500: Lỗi từ phía máy chủ.

3️⃣ Cơ Chế Gửi Dữ Liệu (POST Request)

Để tạo một đơn hàng mới hoặc gửi một comment tự động, chúng ta dùng POST kèm theo khối dữ liệu (body) ở định dạng JSON.

new_post = {'title': 'Hello API', 'body': 'Auto content'}
r = requests.post("https://api.example.com/posts", json=new_post)

TỔNG KẾT BUỔI 9

Bạn đã làm chủ được “ngôn ngữ giao tiếp” của các ứng dụng hiện đại. Kỹ năng này cho phép bạn xây dựng các hệ thống tự động hóa vô cùng mạnh mẽ và ổn định. Ở buổi 10, chúng ta sẽ học cách kết nối nhiều API lại thành một quy trình (Workflow) hoàn chỉnh!


🛠️ Xây dựng giải pháp tự động tại: Hướng nghiệp Python – Automation

| BUỔI 7: DATA CLEANING VÀ STORAGE — BIẾN DỮ LIỆU THÔ THÀNH TÀI SẢN

Được viết bởi thanhdt vào ngày 24/03/2026 lúc 23:02 | 107 lượt xem

Sau khi đã cào được hàng nghìn dòng dữ liệu ở các buổi trước, thách thức cuối cùng là: Làm sao để lưu chúng lại một cách ngăn nắp để sử dụng lâu dài? Và làm sao để dọn dẹp những ký tự thừa (khoảng trắng, icon…) để dữ liệu thật “sạch”?


1️⃣ Làm Sạch Dữ Liệu Web (Data Cleaning)

Dữ liệu lấy từ web thường đi kèm với các ký tự \n, \t hoặc các dấu cách thừa. Hãy sử dụng hàm .strip() và biểu thức chính quy (Regex) để xử lý chúng.

clean_text = raw_text.strip().replace('\n', ' ')

2️⃣ Lưu Dữ Liệu Vào CSV (Dùng Cho Excel)

CSV là định dạng phổ biến nhất vì nó cực kỳ nhẹ và có thể mở trực tiếp bằng Excel để xem báo cáo.

import csv

with open('data.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['Tên SP', 'Giá'])
    writer.writerows(list_data)

3️⃣ Lưu Dữ Liệu Vào JSON (Dùng Cho App/Web)

Nếu bạn muốn dữ liệu của mình có cấu trúc phức tạp hơn (nồng nhau) để dùng cho các ứng dụng web khác, JSON là sự lựa chọn hoàn hảo.


TỔNG KẾT BUỔI 7

Chúc mừng bạn đã hoàn thành Module 2! Bạn hiện đã có một quy trình khép kín: Lấy dữ liệu -> Làm sạch -> Lưu trữ. Đây chính là nền tảng của các dự án Big Data. Ở Module 3, chúng ta sẽ học cách làm việc với API — cách lấy dữ liệu “chính thống” và mạnh mẽ nhất hiện nay!


💾 Quản trị dữ liệu thông minh tại: Hướng nghiệp Python – Automation

| BUỔI 6: ADVANCED SCRAPING TECHNIQUES — VƯỢT QUA CÁC RÀO CẢN DỮ LIỆU

Được viết bởi thanhdt vào ngày 24/03/2026 lúc 23:02 | 85 lượt xem

Tiếp nối buổi học trước, hôm nay chúng ta sẽ giải quyết những bài toán thực tế khó hơn: Làm sao để lấy dữ liệu khi web yêu cầu đăng nhập? Làm sao để lật từng trang (pagination) để lấy toàn bộ dữ liệu? Và làm sao để trình duyệt không phát hiện ra chúng ta là một con robot?


1️⃣ Giả Lập Trình Duyệt Với User-Agent

Nhiều website sẽ chặn các request từ Python. Để vượt qua, chúng ta cần gửi kèm Headers để giả vờ rằng request này đến từ một trình duyệt Chrome hoặc Firefox thực thụ.

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url, headers=headers)

2️⃣ Duy Trì Trạng Thái Với Session & Cookies

Khi quét dữ liệu sau khi đăng nhập, bạn cần sử dụng requests.Session(). Nó giúp Python ghi nhớ Cookies giống như trình duyệt, giúp bạn không phải đăng nhập lại ở mỗi click.


3️⃣ Kỹ Thuật Phân Trang (Pagination)

Thay vì chỉ quét 1 trang, chúng ta sử dụng vòng lặp for hoặc while kết hợp với tham số URL để tự động nhảy sang trang 2, 3, 4 cho đến khi hết dữ liệu.

for p in range(1, 11):
    page_url = f"https://example.com/products?page={p}"
    # Thực hiện scraping ở đây

TỔNG KẾT BUỔI 6

Bạn đã nâng cấp kỹ năng Scraping lên một tầm cao mới. Việc hiểu về Header, Session và Pagination cho phép bạn khai thác dữ liệu từ các sàn thương mại điện tử hay các trang tin tức lớn một cách ổn định. Tiếp theo, ở buổi 7, chúng ta sẽ học cách lưu trữ đống dữ liệu này vào tệp tin chuyên nghiệp!


🔍 Chinh phục dữ liệu lớn tại: Hướng nghiệp Python – Automation

| BUỔI 5: WEB SCRAPING CƠ BẢN — THU THẬP DỮ LIỆU TỰ ĐỘNG VỚI BEAUTIFUL SOUP

Được viết bởi thanhdt vào ngày 24/03/2026 lúc 23:02 | 85 lượt xem

Nếu Selenium là robot điều khiển trình duyệt thì Beautiful Soup là một “chuyên gia bóc tách” dữ liệu. Nó không cần mở trình duyệt, giúp bạn lấy hàng nghìn dòng dữ liệu từ website chỉ trong vài giây với tốc độ cực nhanh.


1️⃣ Thư Viện Requests & Beautiful Soup

Quy trình rất đơn giản: Dùng requests để tải mã nguồn HTML về, sau đó dùng Beautiful Soup để “nấu” và lọc ra những thông tin bạn cần.

[!IMPORTANT]
🚀 Nội dung này thuộc Module 2 của: Khóa học Python Automation thực chiến


2️⃣ Cách Bóc Tách Văn Bản Và Liên Kết

Bạn có thể tìm kiếm phần tử theo thẻ (tag), ID hoặc Class CSS một cách cực kỳ linh hoạt.

import requests
from bs4 import BeautifulSoup

url = "https://example.com"
response = requests.get(url)

# Chuyển đổi HTML sang đối tượng Soup
soup = BeautifulSoup(response.text, 'html.parser')

# Lấy tiêu đề trang
title = soup.find('h1').text
print(f"Tiêu đề: {title}")

# Lấy tất cả các đường link
links = soup.find_all('a')
for link in links:
    print(link.get('href'))

3️⃣ Tại Sao Nên Dùng Beautiful Soup Thay Vì Selenium?

Beautiful Soup không cần khởi động trình duyệt nên tốn ít tài nguyên máy tính hơn và tốc độ nhanh hơn gấp 10-20 lần. Nó là lựa chọn số 1 khi bạn cần quét dữ liệu từ các trang tĩnh hoặc API công khai.


TỔNG KẾT BUỔI 5

Bạn đã nắm được kỹ thuật “cào” dữ liệu cơ bản nhất. Đây là bước đầu tiên để xây dựng các công cụ so sánh giá, theo dõi tin tức tự động. Ở buổi 6, chúng ta sẽ học các kỹ thuật nâng cao để đối phó với những website khó tính hơn!


🌐 Khám phá thế giới nội dung số tại: Hướng nghiệp Python – Automation

| BUỔI 4: WAIT STRATEGIES — BÍ QUYẾT GIÚP SCRIPT “LÌ ĐÒN” TRƯỚC MỌI TỐC ĐỘ MẠNG

Được viết bởi thanhdt vào ngày 24/03/2026 lúc 23:02 | 84 lượt xem

Bạn đã bao giờ viết xong một script chạy rất tốt ở nhà nhưng khi mang lên công ty (với mạng chậm hơn) thì lại báo lỗi NoSuchElementException? Đó là vì bạn chưa làm chủ kỹ thuật Chờ đợi (Wait Strategies). Buổi học hôm nay sẽ giúp script của bạn trở nên thông minh và kiên nhẫn hơn.


1️⃣ Tại Sao Cần Chờ Đợi?

Trang web hiện đại sử dụng AJAX và JavaScript để tải nội dung một cách bất đồng bộ. Selenium chạy code Python nhanh hơn tốc độ hiển thị của trình duyệt, dẫn đến việc nó cố gắng tương tác với một thứ chưa kịp xuất hiện.


2️⃣ Explicit Wait & Implicit Wait

Hãy bỏ ngay thói quen dùng time.sleep() vì nó làm script của bạn chậm đi một cách lãng phí. Thay vào đó hãy dùng các chiến lược chờ đợi thông minh hơn:

  • Implicit Wait: Thiết lập một lần duy nhất, Selenium sẽ tự động chờ trong X giây cho mọi phần tử trước khi báo lỗi.
  • Explicit Wait (Khuyên dùng): Chỉ chờ cho một phần tử cụ thể với một điều kiện cụ thể (ví dụ: chờ cho đến khi nút Đăng nhập có thể click được).
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Ví dụ Explicit Wait: Chờ tối đa 10 giây cho đến khi ID 'success-msg' hiện ra
wait = WebDriverWait(driver, 10)
message = wait.until(EC.visibility_of_element_located((By.ID, "success-msg")))

3️⃣ Xử Lý Lỗi Và Ngoại Lệ (Error Handling)

Script Automation của bạn không được phép “chết” giữa chừng chỉ vì một lỗi nhỏ. Hãy sử dụng khối try-except để bắt lỗi và xử lý chúng một cách êm đẹp.

try:
    # Code tương tác
    driver.find_element(By.ID, "promo-code").send_keys("SALE50")
except Exception as e:
    print(f"Lỗi: {e}. Đang thực hiện phương án dự phòng...")
    # Chụp ảnh màn hình lỗi để debug sau này
    driver.save_screenshot("error.png")

TỔNG KẾT BUỔI 4

Chúc mừng bạn đã hoàn thành Module 1 về Selenium! Giờ đây bạn đã có đủ công cụ để xây dựng các robot điều khiển trình duyệt chuyên nghiệp, ổn định và có khả năng tự phục hồi khi gặp lỗi. Trong Module 2, chúng ta sẽ học một cách lấy dữ liệu web nhanh hơn gấp nhiều lần với Beautiful Soup!


🛡️ Bảo mật và ổn định hạ tầng tự động hóa tại: Hướng nghiệp Python – Automation

| BUỔI 3: USER INTERACTIONS — MÔ PHỎNG MỌI THAO TÁC CỦA CON NGƯỜI

Được viết bởi thanhdt vào ngày 24/03/2026 lúc 23:02 | 110 lượt xem

Sau khi đã biết cách tìm phần tử ở Buổi 2, hôm nay chúng ta sẽ học cách “điều khiển” chúng. Selenium có thể bắt chước 99% hành động của một người dùng thực thụ: từ những cú click chuột đơn giản đến việc điền form hay tải những tập tin quan trọng.


1️⃣ Click, Gõ Phím & Gửi Form

Đây là những tương tác cơ bản nhất nhưng lại xuất hiện trong mọi script automation.

# Nhập văn bản
element.send_keys("Thông tin cần nhập")

# Xóa văn bản cũ rồi mới nhập
element.clear()
element.send_keys("Thông tin mới")

# Click chuột
button.click()

# Gửi form (nhấn Enter)
element.submit()

2️⃣ Xử Lý Dropdown (Danh Sách Thả Xuống)

Với các thẻ <select>, chúng ta không dùng click thông thường mà sử dụng lớp hỗ trợ Select của Selenium để chọn theo tên, giá trị hoặc chỉ số.

from selenium.webdriver.support.ui import Select

select = Select(driver.find_element(By.ID, "city-select"))
select.select_by_visible_text("Hà Nội")

3️⃣ Upload File Tự Động

Nhiều bạn thường bị kẹt ở bước này vì cửa sổ chọn file của Windows không thuộc quyền kiểm soát của Selenium. Bí quyết cực đơn giản: Hãy send_keys đường dẫn tuyệt đối của file vào thẻ input!

# Upload ảnh
upload_input = driver.find_element(By.XPATH, "//input[@type='file']")
upload_input.send_keys("C:/data/image.png")

TỔNG KẾT BUỔI 3

Thao tác thành thạo các tương tác người dùng giúp script của bạn trở nên sống động và linh hoạt. Tuy nhiên, tốc độ của máy tính nhanh hơn trình duyệt rất nhiều, dẫn đến lỗi “không tìm thấy phần tử”. Ở buổi 4, chúng ta sẽ học bí thuật Wait Strategies để script luôn chạy ổn định dù mạng lag hay web chậm!


🤖 Tự động hóa thông minh cùng: Hướng nghiệp Python – Automation

| BUỔI 2: LOCATING ELEMENTS — CÁCH NHẮM MỤC TIÊU CHÍNH XÁC TRÊN TRANG WEB

Được viết bởi thanhdt vào ngày 24/03/2026 lúc 23:02 | 81 lượt xem

Làm thế nào để Selenium biết cần phải click vào nút nào giữa hàng nghìn thẻ HTML? Đó là lúc bạn cần đến kỹ năng Locating Elements. Đây là kỹ năng quan trọng nhất của một chuyên gia Automation: Tìm đúng — Click trúng.


1️⃣ Các Phương Thức Tìm Kiếm Cơ Bản

Selenium cung cấp nhiều cách để “chỉ điểm” một phần tử thông qua thuộc tính của nó.

  • ID: Sạch sẽ và nhanh nhất (vì ID là duy nhất). By.ID
  • Name: Thường dùng cho các ô nhập liệu trong Form. By.NAME
  • Class Name: Dùng khi muốn tìm các nhóm phần tử giống nhau. By.CLASS_NAME

2️⃣ Sức Mạnh Của XPath & CSS Selectors

Khi các thuộc tính cơ bản không đủ, chúng ta cần đến những “vũ khí hạng nặng” có khả năng len lỏi vào từng ngóc ngách của mã nguồn HTML.

  • XPath: Cực kỳ linh hoạt, có thể tìm ngược lên cha hoặc xuống con.
  • Ví dụ: //button[text()='Đăng nhập']
  • CSS Selectors: Tốc độ nhanh hơn và cú pháp gọn gàng hơn XPath trong nhiều trường hợp.
  • Ví dụ: .submit-button > span

3️⃣ Thực Hành: Soi Mã Nguồn Với F12

Bí quyết để viết code Automation giỏi không nằm ở Python, mà nằm ở việc bạn thạo công cụ Inspect Element (F12) của trình duyệt. Hãy học cách copy XPath hoặc CSS Selector một cách thông minh để script của bạn luôn ổn định.

# Ví dụ tìm phần tử bằng XPath
login_btn = driver.find_element(By.XPATH, "//button[@id='login']")
login_btn.click()

TỔNG KẾT BUỔI 2

Xác định đúng phần tử chiếm 70% thành công của một dự án Automation. Khi bạn đã “nhắm” được mục tiêu, việc ra lệnh tiếp theo sẽ trở nên vô cùng đơn giản. Trong buổi 3, chúng ta sẽ học cách thực hiện các tương tác phức tạp hơn như kéo thả, chọn dropdown hay tải file!


🎯 Tối ưu hóa quy trình làm việc tại: Hướng nghiệp Python – Automation