มาทำ Automation หน้าเว็บด้วย Puppeteer กัน

จริงๆ เป้าหมายของ Blog นี้คือ ไปเจอวิธีใช้ Puppeteer โดยไม่ต้องมีเครื่อง Desktop มาแต่ว่ากลัวคนไม่รู้จัก เลยมาเขียนเรื่อง Puppeteer ก่อน

Puppeteer คือ??

เมื่อหลายเดือนก่อนตอน Chrome 59 ออก ตัว stable มี feature นึงที่เปิดตัวมาด้วยคือ Chrome headless อธิบายง่ายๆคือ เราสามารถเขียนโปรแกรมสั่งให้ Chrome ทำสิ่งต่างๆได้โดยไม่ต้องมาเปิด chrome หรือ click เองได้ แต่มันติดตรงที่ว่า มันแอบใช้ยากอยู่หน่อย Google เลยทำ Puppeteer ขึ้นมาเพื่อให้มันง่ายขึ้น ถ้าใครเคยใช้ PhantomJS หรือ NightmareJS ก็คือแบบเดียวกันเลย เขียนด้วย node.js เหมือนกันด้วย

ส่วนตัวผมเคยใช้ Puppeteer อยู่บน Production แต่ต้องเอาลงมาก่อนเพราะว่ามีปัญหาเรื่อง Memory leak แต่ผมชอบกว่า NightmareJS เยอะเลยเพราะ base อยู่บน Promise วึ่งเขียนง่ายกว่ารวมถึงตัว NightmareJS ใช้ Electron ซึ่งข้ากว่า chrome อยู่นิดหน่อย จากที่ลองดู Puppeteer เร็วกว่า NightmareJS อยู่ประมาณ 15%-20%

เขียนยังไง code ยังไง?

ถ้าใครเคยเขียน NightmareJS มาก่อน ก็บอกได้แค่ว่าเขียนเหมือนกันเลย หน้าตาประมาณนี้

https://gist.github.com/thangman22/f9f11229c3a682d8902acb497fd67c4b

ถ้าอยากให้เปิด Browser เพื่อให้เห็นว่า มันทำงานยังไง ก็สามารถ ปิด headless mode ได้

const browser = await puppeteer.launch({headless: false});

จริงๆ Pupeteer มีความสามารถทำได้พอๆกับมนุษย์คลิกเองได้เลย เราสามารถเอา Pupeteer มาทำอะไรได้เยอะมากอย่างเช่น

  • Automate testing
  • ถ่าย Screenshot
  • เก็บ content เว็บไซต์
  • automate กดอะไรต่างๆ e.g. เว็บลงทะเบียนเรียน

อย่างที่บอกครับว่าผมเขียน Blog นี้เพื่อไปอีก Blog นึง ซึ่งคือ การใช้ Pupeteer โดยไม่ต้องอาศัยเครื่อง Desktop เพราะว่าปัญหาหลักๆของ Pupeteer เลยคือ มันต้องการเครื่องที่มี Desktop เพื่อรัน Chrome และเป็นปัญหามากๆถ้าเราต้องใช้บน Linux server


Discover more from Thangman22's

Subscribe to get the latest posts sent to your email.

Leave a Reply

Discover more from Thangman22's

Subscribe now to keep reading and get access to the full archive.

Continue reading