เครื่องมือภายในลดงานทำมือซ้ำของทีมพัฒนาซอฟต์แวร์: ปกปิดข้อมูลในไฟล์ตาราง สคริปต์ทำขั้นตอนบนเว็บและในโปรแกรม บันทึกประชุม และต้นแบบใบเสนอราคา
ชุดเครื่องมือภายใน 5 ชิ้นนี้ลดงานทำมือซ้ำของทีมพัฒนาซอฟต์แวร์ เราพัฒนาไว้ใช้เองระหว่างปี 2563–2567 ชุดนี้มีโปรแกรม Anonymization ปกปิดข้อมูลในไฟล์ตาราง สคริปต์ Selenium ทำขั้นตอนบนหน้าเว็บ ตัวบันทึก RPA ที่บันทึกการใช้เมาส์และแป้นพิมพ์แล้วเล่นซ้ำ แอป InMeet สั่งอัดวิดีโอการประชุม และต้นแบบหน้าจอ DoQuot สำหรับทำใบเสนอราคา ทุกชิ้นเราสร้างและทดสอบในทีมของเราเอง

- อุตสาหกรรม
- บริการ
- ปี
- 2563–2567
- ขอบเขตงาน
- เครื่องมือภายใน 5 ชิ้นที่เราสร้างและทดสอบในทีม: โปรแกรม Anonymization (Python) อ่านไฟล์ CSV, XLSX หรือ XLS ปกปิดข้อมูลตามไฟล์ตั้งค่า แล้วสร้างไฟล์ผลลัพธ์กับไฟล์จับคู่ (mapping) สำหรับแปลงกลับ (ม.ค.–มี.ค. 2567, 5 สัปดาห์) · สคริปต์ Selenium + ChromeDriver เลือกค่าในเมนู แนบไฟล์ Excel และกดส่งบนหน้าเว็บ พร้อมคู่มือ (ม.ค.–มี.ค. 2567, 8 สัปดาห์) · ตัวบันทึก RPA (PyAutoGUI + pynput) บันทึกการคลิกเมาส์และการกดแป้นพิมพ์เป็น log พร้อมวิดีโอหน้าจอ แล้วเล่นซ้ำ ทดสอบกับกรณีพิมพ์ข้อความใน Notepad (ไฟล์ทดสอบลงวันที่ เม.ย. 2566) · แอป InMeet โหมด Controller สั่งเครื่องโหมด Client เริ่มและหยุดอัดวิดีโอ แล้วอัปโหลดขึ้นเซิร์ฟเวอร์ ตามคู่มือปี 2563 · ต้นแบบหน้าจอ DoQuot หน้าตารางสถานะและหน้าสร้างใบเสนอราคา พร้อมไฟล์ติดตั้งบน Android (ต.ค. 2567, 2 วัน)
สรุปสั้น
- ชุดเครื่องมือภายใน 5 ชิ้นนี้ลดงานทำมือซ้ำของทีมพัฒนาซอฟต์แวร์ เราสร้างและทดสอบเป็นเครื่องมือภายในและต้นแบบระหว่างปี 2563–2567
- โปรแกรม Anonymization ปกปิดข้อมูลในไฟล์ CSV, XLSX และ XLS ตามไฟล์ตั้งค่า และแปลงกลับได้ด้วยไฟล์จับคู่ (mapping) เราทำเสร็จในช่วงเดือนมกราคม–มีนาคม 2567 ใช้เวลา 5 สัปดาห์
- งานอัตโนมัติแยกเป็น 2 แบบ: Selenium สำหรับหน้าเว็บที่อ้างถึงปุ่มจากโค้ดหน้าเว็บได้ และตัวบันทึก RPA ที่เล่นซ้ำตามตำแหน่งบนหน้าจอสำหรับโปรแกรมบนเครื่อง
- InMeet ให้เครื่องโหมด Controller สั่งเครื่องโหมด Client เริ่มและหยุดอัดวิดีโอการประชุม แล้วอัปโหลดขึ้นเซิร์ฟเวอร์ ตามคู่มือปี 2563
- DoQuot คือต้นแบบหน้าจอตารางสถานะและหน้าสร้างใบเสนอราคา ที่เราสร้างในเดือนตุลาคม 2567 พร้อมไฟล์ติดตั้งบน Android
โจทย์หน้างาน
ทีมพัฒนาของเรามีงานที่ทำด้วยมือซ้ำทุกครั้ง ได้แก่ ปกปิดข้อมูลในไฟล์ Excel ก่อนนำไปใช้ต่อ คลิกเลือกเมนู แนบไฟล์ และกดส่งบนหน้าเว็บเดิมหลายรอบ บันทึกวิดีโอการประชุม และทำใบเสนอราคาจากรายการงานกับจำนวนวันทำงาน (Manday) งานเหล่านี้เสียเวลาและพลาดง่ายเมื่อทำซ้ำหลายรอบ
สิ่งที่เราทำ
เราเขียนเครื่องมือเล็กแยกตามงาน ได้แก่ โปรแกรม Python ปกปิดข้อมูลในไฟล์ CSV, XLSX และ XLS แบบแปลงกลับได้ สคริปต์ Selenium สำหรับขั้นตอนบนหน้าเว็บ ตัวบันทึก RPA (Robotic Process Automation คือให้ซอฟต์แวร์ทำขั้นตอนเดิมบนคอมพิวเตอร์ตามลำดับที่กำหนด) สำหรับโปรแกรมบนเครื่อง แอป InMeet ที่ให้เครื่องเดียวสั่งเครื่องอื่นอัดวิดีโอการประชุม และต้นแบบหน้าจอ DoQuot
ผลทดสอบกับชิ้นงานจริง
เอกสารสรุปโครงการประจำปี 2567 ระบุว่าโปรแกรม Anonymization และสคริปต์ Selenium ทำเสร็จแล้ว โดย Selenium จับองค์ประกอบที่วาดบน canvas (เช่น กราฟ) ไม่ได้ ตัวบันทึก RPA มีผลรันกรณีทดสอบพร้อม log และวิดีโอ InMeet สั่งอัดวิดีโอและอัปโหลดได้ตามคู่มือปี 2563 และ DoQuot มีต้นแบบหน้าจอตารางสถานะและหน้าสร้างใบเสนอราคา
ที่มาของโจทย์
โจทย์ของเคสนี้มาจากงานในทีมพัฒนาของเราเอง งานที่ต้องทำด้วยมือซ้ำทุกครั้ง ได้แก่ ปกปิดข้อมูลในไฟล์ Excel ก่อนนำไปใช้ต่อ คลิกทำขั้นตอนเดิมบนหน้าเว็บ บันทึกวิดีโอการประชุม และทำใบเสนอราคาจากรายการงานกับ Manday
งานเหล่านี้ทำด้วยมือได้ แต่เสียเวลาและพลาดง่ายเมื่อทำซ้ำหลายรอบ เช่น การคลิกทดสอบหน้าเว็บเดิมทุกครั้งที่แก้โปรแกรม เราจึงทำเครื่องมือเล็กแยกตามงาน แต่ละชิ้นพัฒนาในปีต่างกันระหว่างปี 2563–2567
RPA คืออะไร
RPA (Robotic Process Automation) คือการให้ซอฟต์แวร์ทำขั้นตอนบนคอมพิวเตอร์ตามลำดับที่กำหนดไว้ เช่น คลิก กรอก แนบไฟล์ และกดส่ง เหมาะกับงานที่ขั้นตอนเหมือนเดิมทุกครั้ง
ข้อกำหนดและข้อจำกัด
แต่ละเครื่องมือมีข้อกำหนดของตัวเอง ตามเอกสารความต้องการ คู่มือ และขอบเขตงานที่เราเขียนไว้ ข้อกำหนดหลักมีดังนี้
- Anonymization: อ่านไฟล์ CSV, XLSX และ XLS กำหนดข้อมูลที่ต้องปกปิดในไฟล์ตั้งค่า (file_config) และต้องแปลงกลับเป็นข้อมูลเดิมได้
- Selenium: เลือกค่าในเมนูแบบเลื่อนลง (dropdown) แนบไฟล์ Excel และกดปุ่มส่งหรือดาวน์โหลดบนหน้าเว็บ
- ตัวบันทึก RPA: บันทึกการคลิกเมาส์และการกดแป้นพิมพ์เป็น log พร้อมวิดีโอหน้าจอ เพื่อตรวจย้อนหลังได้ทั้งรอบบันทึกและรอบเล่นซ้ำ
- InMeet: ให้เครื่องเดียวสั่งเริ่มและหยุดอัดวิดีโอของเครื่องอื่น แล้วอัปโหลดไฟล์วิดีโอขึ้นเซิร์ฟเวอร์
- DoQuot: หน้าจอสำหรับทำใบเสนอราคาจากรายการงานกับ Manday โดยเริ่มจากหน้าตารางสถานะและหน้าสร้างใบเสนอราคา
ข้อจำกัดหลักมาจากวิธีที่เครื่องมืออ้างถึงหน้าจอ Selenium อ่านปุ่มและช่องกรอกจากโค้ดหน้าเว็บ จึงจับองค์ประกอบที่วาดบน canvas เช่น กราฟ ไม่ได้ ส่วนตัวบันทึก RPA เล่นซ้ำตามตำแหน่งบนหน้าจอ จึงขึ้นกับตำแหน่งหน้าต่างและความละเอียดจอ
ควรใช้ Selenium หรือตัวบันทึกเมาส์และคีย์บอร์ด
ใช้ Selenium เมื่องานอยู่บนหน้าเว็บ และใช้ตัวบันทึกเมื่องานอยู่ในโปรแกรมบนเครื่อง Selenium อ้างถึงปุ่มและช่องกรอกจากโค้ดหน้าเว็บ เช่น ID, NAME, XPATH หรือ CSS selector จึงไม่ขึ้นกับตำแหน่งบนจอ ตัวบันทึกใช้ PyAutoGUI/pynput สั่งเมาส์และแป้นพิมพ์ตามตำแหน่งที่บันทึกไว้
ตัวบันทึกจึงใช้กับโปรแกรมที่ไม่มีโค้ดหน้าเว็บให้อ้างถึงได้ กรณีทดสอบของเราเป็นการพิมพ์ข้อความในโปรแกรม Notepad
- 1
Anonymization: ปกปิดข้อมูลในไฟล์ตาราง
ผู้ใช้เตรียมไฟล์ตั้งค่า (file_config) แล้วสั่งคำสั่ง encode กับไฟล์ต้นฉบับ CSV, XLSX หรือ XLS ผ่านหน้าต่างคำสั่ง (Terminal) โปรแกรมสร้างไฟล์ที่ปกปิดข้อมูลแล้วกับไฟล์จับคู่ (mapping) ไว้ในโฟลเดอร์ output เมื่อต้องการข้อมูลเดิมคืน ให้สั่งคำสั่ง decode พร้อมไฟล์จับคู่
- 2
Selenium: สั่งเบราว์เซอร์ทำขั้นตอนบนหน้าเว็บ
สคริปต์ Python เปิดหน้าเว็บผ่าน ChromeDriver เลือกค่าในเมนู แนบไฟล์ Excel แล้วกดปุ่มส่งหรือดาวน์โหลด คู่มือของเราอธิบายวิธีระบุตำแหน่งปุ่มและช่องกรอกจากโค้ดหน้าเว็บ
- 3
ตัวบันทึก RPA: บันทึกแล้วเล่นซ้ำ
ขณะผู้ใช้ทำงานตามปกติ โปรแกรมบันทึกการคลิกเมาส์และการกดแป้นพิมพ์เป็น log พร้อมวิดีโอหน้าจอ จากนั้นแปลง log เป็นสคริปต์ PyAutoGUI/pynput เพื่อเล่นซ้ำ และบันทึก log กับวิดีโอของรอบที่เล่นซ้ำไว้ตรวจย้อนหลัง
- 4
InMeet: สั่งอัดวิดีโอประชุมจากเครื่องเดียว
เครื่องที่เลือกโหมด Controller สั่งเครื่องที่กด Join เข้ามาในโหมด Client ให้เริ่มหรือหยุดอัดวิดีโอ แล้วไฟล์วิดีโอถูกอัปโหลดขึ้นเซิร์ฟเวอร์
- 5
DoQuot: ต้นแบบหน้าจอใบเสนอราคา
ต้นแบบมีหน้าตารางสถานะใบเสนอราคาและหน้าสร้างใบเสนอราคา เป็นหน้าจอแบบคงที่ และมีไฟล์ติดตั้งบน Android (APK) สำหรับเปิดดูหน้าจอบนอุปกรณ์
สิ่งที่เราสร้างและทดสอบ
เราสร้างโปรแกรม สคริปต์ คู่มือ และต้นแบบต่อไปนี้ และใช้งานภายในทีม
- โปรแกรม Anonymization พร้อมเอกสารความต้องการ และคู่มือการสร้างไฟล์ตั้งค่า การ encode และการ decode
- สคริปต์ Selenium + ChromeDriver พร้อมคู่มือการระบุตำแหน่งปุ่มและช่องกรอก
- ตัวบันทึก RPA: สคริปต์บันทึก สคริปต์เล่นซ้ำ และกรณีทดสอบพร้อม log และวิดีโอ
- แอป InMeet พร้อมคู่มือการใช้งานโหมด Controller และ Client ปี 2563
- ต้นแบบ DoQuot: หน้าตารางสถานะใบเสนอราคา หน้าสร้างใบเสนอราคา และไฟล์ติดตั้งบน Android (APK)
ผลทดสอบของเครื่องมือแต่ละชิ้น
โปรแกรม Anonymization และสคริปต์ Selenium ทำเสร็จในปี 2567 ตัวบันทึก RPA มีผลรันกรณีทดสอบ InMeet สั่งอัดวิดีโอและอัปโหลดได้ และ DoQuot มีต้นแบบหน้าจอ เอกสารสรุปโครงการประจำปี 2567 ของเราระบุว่าโปรแกรม Anonymization ทำเสร็จในเวลา 5 สัปดาห์ และสคริปต์ Selenium ทำเสร็จในเวลา 8 สัปดาห์ ทั้งสองชิ้นทำในช่วงเดือนมกราคม–มีนาคม 2567 ผลในตารางด้านล่างมาจากเอกสารสรุปโครงการ คู่มือ และไฟล์ log กับวิดีโอของการทดสอบ
สิ่งที่เครื่องมือแต่ละชิ้นทำได้ และข้อจำกัดทางเทคนิค
| เครื่องมือ | สิ่งที่ทำได้และทดสอบแล้ว | ข้อจำกัดทางเทคนิค |
|---|---|---|
| Anonymization | ทำเสร็จในปี 2567 ปกปิดและแปลงกลับไฟล์ CSV, XLSX และ XLS ด้วยไฟล์จับคู่ | ต้องเก็บไฟล์จับคู่แยกจากไฟล์ที่ส่งต่อ |
| Selenium | ทำเสร็จในปี 2567 | จับองค์ประกอบที่วาดบน canvas ไม่ได้ |
| ตัวบันทึก RPA | มีผลรันกรณีทดสอบพร้อม log และวิดีโอ ไฟล์ลงวันที่ เม.ย. 2566 | เล่นซ้ำตามตำแหน่งบนหน้าจอ |
| InMeet | สั่งอัดวิดีโอและอัปโหลดได้ตามคู่มือปี 2563 | ทำหน้าที่อัดวิดีโอและอัปโหลด ไม่มีส่วนถอดเสียงเป็นข้อความ |
| DoQuot | ต้นแบบหน้าตารางสถานะและหน้าสร้างใบเสนอราคา พร้อมไฟล์ติดตั้งบน Android ต.ค. 2567 | เป็นหน้าจอแบบคงที่ ไม่มีส่วนคำนวณราคา |
ในปี 2567 เราเก็บโค้ด RPA ไว้ในชุดโค้ดที่นำกลับมาใช้ซ้ำ (Code Reuse) ของบริษัท
สิ่งที่เราเรียนรู้
งานนี้ให้หลักการต่อไปนี้สำหรับงานอัตโนมัติขนาดเล็กในทีม
- เลือกวิธีตามสิ่งที่โปรแกรมเปิดให้อ้างถึง ถ้ามีโค้ดหน้าเว็บให้อ้างถึงปุ่มและช่องกรอก ให้ใช้วิธีแบบ Selenium ก่อน ถ้าไม่มี จึงใช้การบันทึกตำแหน่งบนหน้าจอ ส่วนที่วาดบน canvas ต้องวางวิธีตรวจแยกไว้ตั้งแต่ต้น
- งานอัตโนมัติต้องตรวจย้อนหลังได้ ตัวบันทึก RPA เก็บ log และวิดีโอทั้งรอบบันทึกและรอบเล่นซ้ำ เมื่อผลไม่ตรงกัน เราจึงเทียบได้ว่าขั้นตอนไหนต่างไป
- การปกปิดข้อมูลแบบแปลงกลับได้ย้ายความเสี่ยงไปอยู่ที่ไฟล์จับคู่ ไฟล์นี้ต้องเก็บแยกจากไฟล์ที่ส่งต่อ และจำกัดคนที่เข้าถึง
นำแนวทางนี้ไปใช้กับงานของคุณได้อย่างไร
ถ้าทีมของคุณมีงานคลิก กรอก แนบไฟล์ หรือปกปิดข้อมูลที่ขั้นตอนเหมือนเดิมทุกครั้ง คุณใช้แนวทางเดียวกับเคสนี้ได้ คือแยกงานทีละเรื่อง เลือกเครื่องมือตามชนิดโปรแกรม และเก็บ log ไว้ตรวจย้อนหลัง ส่วนที่ต้องปรับคือวิธีอ้างถึงปุ่มและช่องกรอก เมื่อโปรแกรมของคุณต่างจากเคสนี้
ส่วนที่ใช้ซ้ำได้ และส่วนที่ต้องปรับ
| งาน | ใช้ซ้ำได้ | ต้องปรับเมื่อ |
|---|---|---|
| ขั้นตอนบนหน้าเว็บ | Selenium + ChromeDriver และการระบุตำแหน่งด้วย ID, NAME, XPATH หรือ CSS selector | หน้าเว็บมีกราฟหรือส่วนที่วาดบน canvas หรือโครงหน้าเว็บเปลี่ยนบ่อย |
| ขั้นตอนในโปรแกรมบนเครื่อง | การบันทึกเป็น log และวิดีโอ แล้วแปลงเป็นสคริปต์เล่นซ้ำ | ตำแหน่งหน้าต่างหรือความละเอียดจอต่างจากตอนบันทึก ต้องบันทึกใหม่หรือปรับสคริปต์ |
| ปกปิดข้อมูลในไฟล์ตาราง | ไฟล์ตั้งค่า และการ encode/decode ด้วยไฟล์จับคู่ | ไฟล์ไม่ใช่ CSV, XLSX หรือ XLS หรือคุณไม่ต้องการให้แปลงกลับได้ |
| บันทึกการประชุม | การสั่งอัดวิดีโอจากเครื่องเดียวและอัปโหลดขึ้นเซิร์ฟเวอร์ | คุณต้องการข้อความถอดเสียงด้วย ต้องเพิ่มส่วนถอดเสียงเป็นงานแยก |
| ใบเสนอราคา | แบบร่างหน้าตารางสถานะและหน้าสร้างใบเสนอราคา | คุณต้องการคำนวณจาก Manday หรือประเมินราคาอัตโนมัติ ต้องพัฒนาส่วนนี้ใหม่ |
- แยกงานที่ขั้นตอนเหมือนเดิมทุกครั้งออกจากงานที่เปลี่ยนบ่อย งานที่เปลี่ยนบ่อยไม่เหมาะกับการบันทึกแล้วเล่นซ้ำ
- ตรวจว่าหน้าเว็บหรือโปรแกรมของคุณเปิดให้อ้างถึงปุ่มและช่องกรอกได้หรือไม่
- กำหนดคนเก็บไฟล์จับคู่และที่เก็บ ก่อนเริ่มปกปิดข้อมูลจริง
- กำหนดผลที่ต้องการและขอบเขตของเครื่องมือแต่ละชิ้นให้ชัดตั้งแต่ต้น
เทคโนโลยีที่ใช้
คำถามที่พบบ่อย
ถ้าต้องการเครื่องมือลักษณะนี้ในทีมของคุณ ควรเริ่มอย่างไร
เครื่องมือชุดนี้เราใช้ภายในทีม ถ้าคุณต้องการระบบลักษณะนี้ เราพัฒนาให้ตามขอบเขตงานของคุณได้ เริ่มจากแยกงานที่ขั้นตอนเหมือนเดิมทุกครั้ง แล้วตรวจว่าหน้าเว็บหรือโปรแกรมของคุณเปิดให้อ้างถึงปุ่มและช่องกรอกได้หรือไม่ เพื่อเลือกระหว่าง Selenium กับตัวบันทึกเมาส์และคีย์บอร์ด
Selenium กับตัวบันทึกเมาส์และคีย์บอร์ดต่างกันอย่างไร
Selenium สั่งเบราว์เซอร์โดยอ้างถึงปุ่มและช่องกรอกจากโค้ดหน้าเว็บ จึงเหมาะกับเว็บแอป ส่วนตัวบันทึกใช้ PyAutoGUI/pynput สั่งเมาส์และแป้นพิมพ์ตามที่บันทึกไว้ ใช้กับโปรแกรมบนเครื่องได้ แต่ขึ้นกับตำแหน่งบนหน้าจอ
ข้อมูลที่ปกปิดแล้ว แปลงกลับได้หรือไม่
ได้ ตอนสั่ง encode โปรแกรมสร้างไฟล์จับคู่ (mapping) ไว้ด้วย เมื่อสั่ง decode พร้อมไฟล์จับคู่นี้ จะได้ข้อมูลเดิมกลับมา คุณจึงต้องเก็บไฟล์จับคู่แยกจากไฟล์ที่ส่งต่อ และจำกัดคนที่เข้าถึง
InMeet สั่งอัดวิดีโอการประชุมจากเครื่องเดียวได้อย่างไร
ตามคู่มือปี 2563 เครื่องที่เลือกโหมด Controller สั่งเครื่องที่กด Join เข้ามาในโหมด Client ให้เริ่มและหยุดอัดวิดีโอ แล้วไฟล์วิดีโอถูกอัปโหลดขึ้นเซิร์ฟเวอร์ InMeet ทำหน้าที่อัดวิดีโอ ถ้าคุณต้องการข้อความถอดเสียงด้วย ต้องเพิ่มส่วนถอดเสียงเป็นงานแยก
สคริปต์ Selenium ใช้กับหน้าเว็บที่มีกราฟได้ไหม
ใช้กับปุ่ม เมนู และช่องกรอกบนหน้าเว็บนั้นได้ แต่สคริปต์ Selenium ของเราจับองค์ประกอบที่วาดบน canvas เช่น กราฟ ไม่ได้ เพราะ Selenium อ้างถึงองค์ประกอบจากโค้ดหน้าเว็บด้วย ID, NAME, XPATH หรือ CSS selector ถ้างานของคุณต้องตรวจส่วนที่วาดบน canvas ต้องวางวิธีตรวจแยกไว้ตั้งแต่ต้น





