คุณรู้ไหมว่าคุณสามารถควบคุมเว็บเบราว์เซอร์ของคุณด้วย Ruby ได้?
Gem Watir ช่วยให้คุณทำได้
และมันมาพร้อมกับพลังเต็มรูปแบบของเบราว์เซอร์สมัยใหม่:
- คุณสามารถถ่ายภาพหน้าจอ (screenshot) ของพื้นที่ที่มองเห็นได้ของหน้าเว็บ
- คุณสามารถรัน JavaScript บนหน้าเว็บใดๆ ได้ โดยไม่ต้องเปิดเครื่องมือนักพัฒนาและพิมพ์โค้ดด้วยตนเอง
- คุณสามารถหาลิงก์ คลิกพวกมัน และแม้แต่กรอกข้อความลงในช่องป้อนข้อมูล
ทั้งหมดนี้พร้อมใช้งานสำหรับคุณ ขอบคุณ Watir และโครงการ Selenium
มาดูตัวอย่างโค้ดบ้าง!
เปิดเบราว์เซอร์
ก่อนอื่น สร้างออบเจ็กต์เบราว์เซอร์แบบนี้:
require 'watir' browser = Watir::Browser.new
สิ่งนี้จะเปิดหน้าต่าง Chrome ว่าง (สมมติว่าคุณติดตั้งไว้) ที่คุณสามารถควบคุมได้ตอนนี้
ตัวอย่างเช่น:
browser.goto("rubyguides.com")
Chrome จะนำทางไปยัง URL นี้ และหน้าจะโหลดเหมือนคุณพิมพ์ URL เอง
ตอนนี้:
คุณสามารถทำอะไรก็ได้ที่คุณปกติทำบนเว็บไซต์ด้วยเมาส์และคีย์บอร์ด
เช่น หาลิงก์และคลิกมัน
ตัวอย่าง:
browser.link(text: "All Posts").click
วิธีค้นหา Element ด้วย Watir
คุณสามารถค้นหา element ด้วยแอตทริบิวต์ของพวกมัน เช่น:
- text
- class
- id
Element เหล่านี้มีเมธอดที่ตรงกับชื่อ HTML ของพวกมัน ดังนั้น หากคุณมองหาแท็ก H1 เมธอดคือ h1 สำหรับย่อหน้าเมธอดคือ p และสำหรับรูปภาพเมธอดคือ img หรือ images
ตัวอย่าง:
browser.h1(text: "Ruby Post Index")
คุณยังสามารถได้รายการ element โดยใช้พหูพจน์ของชื่อเมธอด
ตัวอย่าง:
browser.links browser.images browser.h2s
สิ่งนี้จะให้ออบเจ็กต์ Watir::AnchorCollection ซึ่งตอบสนองต่อเมธอดเช่น each, map และ inject
ตัวอย่าง:
browser.links.map(&:href)
วิธีจัดการ Timeout และ Element ที่ไม่มีอยู่
อาจเกิดขึ้นได้ว่า element ไม่มีอยู่ อาจเพราะ element ยังไม่ถูกโหลดเข้าหน้าเว็บ หรือหน้าเว็บเปลี่ยนไป
เกิดอะไรขึ้น เมื่อ Watir หา element ไม่เจอ?
จะมี timeout
ค่าเริ่มต้นคือ 30 วินาที แต่คุณสามารถเปลี่ยนได้:
Watir.default_timeout = 10
เมื่อหมดเวลา คุณจะได้ exception Watir::Exception::UnknownObjectException
แต่มันมีอีกวิธีหนึ่งในการจัดการ!
คุณสามารถตรวจสอบว่า element มีอยู่จริงก่อนคลิกหรือทำการกระทำอื่นๆ
วิธีทำ:
link = browser.link(text: 'Guides') if link.present? link.click end
วิธีถ่ายภาพหน้าจอ (Screenshot)
เมื่อคุณมีเบราว์เซอร์เปิดและหน้าเว็บโหลดแล้ว คุณสามารถถ่ายภาพหน้าจอได้
แบบนี้:
browser.screenshot.save("/tmp/screen.png")
สิ่งนี้บันทึกภาพของ viewport ปัจจุบัน
การรันสคริปต์
คุณสามารถรัน JavaScript ในเบราว์เซอร์เพื่อส่งผลต่อสถานะปัจจุบันของหน้า หรือคุณสามารถเรียกฟังก์ชัน JavaScript ที่กำหนดไว้บนหน้านั้น
วิธีทำ:
browser.execute_script "alert('bacon')" # nil
ผลลัพธ์?
หน้าต่างเตือนพร้อมคำว่า "bacon" 🙂
รันโค้ดและได้ผลลัพธ์กลับมา:
browser.execute_script "return 1 + 1" # 2
วิธีกรอกช่องป้อนข้อมูล (Input Fields)
การกรอกช่องป้อนข้อมูลเกี่ยวข้องกับสองขั้นตอน:
- หา element
- ส่งคีย์ (send keys)
ตัวอย่าง:
browser.input(id: "search").send_keys("orange juice")
ตอนนี้คุณจะต้องหาปุ่ม submit และคลิกมัน
เมธอดและเคล็ดลับ Watir ที่มีประโยชน์
Watir ให้คุณเข้าถึงเมธอดที่มีประโยชน์บางอย่าง
ตัวอย่าง รับ URL ปัจจุบัน:
browser.url
รับรายการแท็บที่เปิดอยู่:
browser.windows
ขยายหน้าต่างปัจจุบันเต็มหน้าจอ:
browser.window.maximize
รับ HTML และข้อความสำหรับหน้าปัจจุบัน:
browser.text browser.html
นี่คือเคล็ดลับหากคุณต้องการค้นหา element ด้วยการจับคู่บางส่วน (partial match) คุณสามารถใช้ regular expression ได้
แบบนี้:
browser.p(text: /ruby/)
สรุป
คุณได้เรียนรู้เกี่ยวกับ Watir ในบทช่วยสอนนี้ Ruby gem ที่ช่วยให้คุณควบคุมเบราว์เซอร์เว็บจากระยะไกล เพื่อให้คุณสามารถทำงานอัตโนมัติและดึงข้อมูลจากหน้าเว็บได้
โปรดแชร์บทความนี้หากคุณพบว่ามันมีประโยชน์ เพื่อให้คนอื่นๆ หาเจอได้!
ขอบคุณที่อ่านครับ