เมื่อสัปดาห์ที่แล้ว เราและ BrowserStack ได้ประกาศว่า WebDriver BiDi พร้อมใช้งานจริงใน BrowserStack แล้ว สัปดาห์นี้ WebDriver BiDi ยังคงร้อนแรงอย่างต่อเนื่องด้วย Firefox 129 และ Puppeteer 23 ที่พร้อมใช้งานจริงสำหรับ WebDriver BiDi
Mozilla เป็นผู้ทำงานร่วมกันที่แข็งแกร่งใน WebDriver BiDi มานานกว่า 4 ปีแล้ว โดยเริ่มตั้งแต่ช่วยกำหนดมาตรฐานใหม่ จากนั้นค่อยๆ นำมาตรฐานดังกล่าวไปใช้ใน Firefox และบันทึกความคืบหน้าอย่างเป็นระเบียบด้วยจดหมายข่าว WebDriver ของ Firefox
ตอนนี้ WebDriver BiDi พร้อมใช้งานใน Firefox แล้ว Puppeteer ตั้งแต่เวอร์ชัน 23 เป็นต้นไปจึงรองรับ Firefox ผ่าน WebDriver BiDi อย่างเสถียร ซึ่งจะช่วยให้คุณทํางานกับ Firefox ได้โดยอัตโนมัติด้วย API ที่กระชับแบบเดียวกับ Chrome การสนับสนุน Chrome DevTools Protocol (CDP) ของ Puppeteer ไม่มีการเปลี่ยนแปลง
Firefox, CDP และ Puppeteer
Puppeteer เป็นเครื่องมือที่เชื่อถือได้สำหรับนักพัฒนาซอฟต์แวร์ในการทำให้เบราว์เซอร์ที่ใช้ Chromium ทำงานอัตโนมัติโดยใช้ Chrome DevTools Protocol หรือที่เรียกว่า CDP ในปี 2019 Puppeteer ได้รับการรองรับเวอร์ชันทดลองสำหรับ Firefox
Mozilla จึงติดตั้งใช้งานและดูแลรักษา CDP ชุดย่อยใน Firefox เพื่อให้การดำเนินการนี้เป็นไปได้ โซลูชันนี้ช่วยให้ Firefox ทำงานอัตโนมัติด้วย Puppeteer API แต่มีข้อจำกัดดังนี้
- ดังที่ชื่อบอกไว้ว่า CDP นั้นใช้โดยเครื่องมือสำหรับนักพัฒนาเว็บของ Chrome และจำเป็นต้องเปลี่ยนแปลงตามข้อกำหนดของเครื่องมือสำหรับนักพัฒนาเว็บ
- CDP ไม่ได้เป็นมาตรฐานตามข้อกำหนดสาธารณะที่แชร์กัน และการทำให้ CDP ใช้งานได้ใน Firefox ต้องใช้การสื่อสารและความพยายามอย่างต่อเนื่อง
- เนื่องจาก Firefox ใช้ CDP เพียงชุดย่อย Puppeteer จึงไม่สามารถรับประกันได้ว่า API ทั้งหมดจะทำงานร่วมกับ Firefox ได้ ซึ่งสร้างความสับสนให้กับผู้ใช้
แม้ว่าเราจะยินดีที่ได้ให้การสนับสนุนนี้ร่วมกับ Mozilla ในช่วง 2-3 ปีที่ผ่านมา แต่เราก็ทราบดีว่านี่ไม่ใช่วิธีแก้ปัญหาถาวร เราต่อยอดจากพาร์ทเนอร์ทางธุรกิจนี้และรวมถึงพาร์ทเนอร์ด้านเบราว์เซอร์และเครื่องมือรายใหญ่อื่นๆ เพื่อสร้าง WebDriver BiDi ร่วมกัน
ทีมเวิร์กเท่านั้นที่จะสร้างทีมในฝันขึ้นมาได้
ทีม Firefox พยายามอย่างเต็มที่เพื่อติดตั้งใช้งาน WebDriver BiDi ใน Firefox ในขณะเดียวกัน ทีม Puppeteer ได้ขยายการรองรับ WebDriver BiDi ไปยัง Puppeteer API เป้าหมายที่ทั้ง 2 ทีมร่วมกันทำคือทำให้ API ทั้งหมดที่จำเป็นสำหรับกรณีการใช้งานการทำงานอัตโนมัติเวอร์ชันที่ใช้งานจริงพร้อมใช้งานโดยใช้ WebDriver BiDi ใน Puppeteer เพื่อให้มั่นใจว่ารองรับทั้ง Chrome และ Firefox

ซึ่งจะช่วยให้ผู้ใช้ Puppeteer เลือก Firefox หรือ Chrome สำหรับการทํางานอัตโนมัติได้ โดยระบุbrowser
คีย์การกําหนดค่าเมื่อเปิดใช้งานอินสแตนซ์ Puppeteer
import puppeteer from 'puppeteer';
const firefoxBrowser = await puppeteer.launch({
browser: 'firefox', // WebDriver BiDi is used by default in Firefox.
});
const page = await firefoxBrowser.newPage();
...
await firefoxBrowser.close();
const chromeBrowser = await puppeteer.launch({
browser: 'chrome',
protocol: 'webDriverBiDi', // CDP would be used by default for Chrome.
});
const page = await chromeBrowser.newPage();
...
await chromeBrowser.close();
ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์ใหม่ใน Firefox 129 และการทำงานของ Mozilla กับ WebDriverBiDi ได้ที่บล็อกโพสต์ Mozilla Hacks ที่เกี่ยวข้อง
การรองรับ CDP ในอนาคต
ข้อมูลโค้ดด้านบนแสดงให้เห็นว่าหากต้องการทำให้ Chrome ทำงานอัตโนมัติโดยใช้ WebDriver BiDi กับ Puppeteer คุณต้องตั้งค่า protocol
เป็น webDriverBiDi
อย่างชัดเจน เนื่องจาก Puppeteer สำหรับ Chrome จะยังคงใช้ CDP เป็นค่าเริ่มต้นต่อไป เพื่อไม่ให้การทำงานอัตโนมัติที่มีอยู่ใช้งานไม่ได้ และเพื่อรองรับการทำงานอัตโนมัติที่เฉพาะเจาะจงสำหรับฟีเจอร์ของ Chrome
การรองรับ CDP ใน Firefox เลิกใช้งานแล้วตั้งแต่ Firefox 129 และมีกำหนดจะนําออกในช่วงสิ้นปี 2024 หากคุณมีการทำงานอัตโนมัติที่ใช้การรองรับ CDP ใน Firefox อยู่แล้ว เราขอแนะนําอย่างยิ่งให้เปลี่ยนไปใช้ WebDriver BiDi หากดำเนินการไม่ได้ โปรดติดต่อไปที่ dev-webdriver@mozilla.org พร้อมแจ้ง Use Case