ปัญหาเดิม
เว็บหน่วยงานกฎหมายบางแห่งแสดงรายการด้วย JavaScript (เช่น แค็ตตาล็อก Novel Food ของ EU) HTTP Request ธรรมดาใน n8n จึงได้หน้าว่าง และอ่านกฎหมายใหม่จากแหล่งนั้นไม่ได้
สิ่งที่สร้าง
service กลางที่ workflow FoodLexAI ใน n8n เรียกเมื่อเจอเว็บที่ต้องเรนเดอร์ก่อน เปิดหน้าเว็บด้วย headless Chrome รอให้ข้อมูลโหลดครบ อ่านตาราง ข้อความ และลิงก์ แล้วส่ง JSON กลับให้ n8n ส่งต่อเข้า FoodLex
ฟีเจอร์หลัก
- endpoint เดียว POST /api/scrape รับ URL แล้วคืน JSON
- อ่านตารางในหน้าเว็บ แล้วจับคู่หัวคอลัมน์กับแต่ละแถวให้อัตโนมัติ
- ไม่มีตารางก็คืนข้อความในหน้า และเก็บลิงก์ทั้งหมดในหน้าให้ด้วย
- รอข้อมูลที่โหลดทีหลังก่อนอ่าน (network idle, รอ selector แล้วรออีกช่วง)
- ให้ workflow ใน n8n ใช้ร่วมกัน ไม่ต้องเขียนตัวดึงข้อมูลแยกในแต่ละ workflow
เบื้องหลังทางเทคนิค
- ใช้ Chrome ของระบบใน Docker พร้อมฟอนต์ไทยและ CJK เพื่อให้หน้าเว็บไทย จีน ญี่ปุ่น แสดงผลถูกต้อง
- ตั้ง Accept-Language เป็นไทยก่อน ใช้ user agent แบบเดสก์ท็อป และปิดเบราว์เซอร์ใน finally เสมอเพื่อไม่ให้ค้างกินหน่วยความจำ