WebDriver Manager + Selenium: หมดปัญหาไดรเวอร์ไม่ตรงเวอร์ชั่น!?

เฮ้ย พวก,

ถ้าใครเคยเขียน Selenium เนี่ยนะ คงรู้ดีเลยว่าการมานั่ง manage web driver เนี่ยมันโคตรปวดหัว! ต้องไปดูเวอร์ชั่น Chrome ของเรา, แล้วไปหา driver ที่ตรงกันเป๊ะๆ, โหลดมา, วางไว้ที่ path ที่ถูกต้อง... โคตรน่าเบื่อเลยจริงดิ? ยิ่งถ้า Chrome มันอัปเดตบ่อยๆ นี่คือร้องไห้เลยนะ โค้ดที่เคยรันได้อยู่ดีๆ ก็พังเฉยๆ เพราะ driver ไม่ตรงเวอร์ชั่น.

แต่โชคดีที่โลกนี้มีฮีโร่เว้ย! นั่นก็คือ webdriver_manager

ไอ้เจ้าตัวนี้มันจะจัดการเรื่องดาวน์โหลด driver ให้เราเองแบบอัตโนมัติเลย สะดวกโคตรๆ แค่เรียกใช้ มันก็ไปเช็คเวอร์ชั่นเบราว์เซอร์เรา แล้วก็โหลดตัวที่ใช่มาให้เลย ไม่ต้องทำอะไรเองอีกต่อไป.

มาดูกันว่าใช้งานยังไงบ้างนะ

อันดับแรก, ก็ pip install สองตัวนี้ซะก่อนเลยนะ:

pip install selenium webdriver-manager

พอติดตั้งเสร็จแล้ว ก็มาลองเขียนโค้ดง่ายๆ ดูกันเลย:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

print("กำลังเปิดเบราว์เซอร์... ")

# นี่แหละ หัวใจสำคัญเลยนะ! มันจะเช็คให้เองว่า Chrome เราเวอร์ชั่นไหน
# แล้วก็ไปโหลด driver ที่เข้ากันมาให้เลย ถ้ายังไม่มี
# โค้ดบรรทัดนี้เนี่ย ช่วยชีวิตได้เยอะมากๆ
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

print("เปิดได้แล้ว! ลองเข้า google ดู")
driver.get("https://www.google.com")
print(f"อยู่หน้า: {driver.title}")

# ลองหา input search box แล้วพิมพ์อะไรหน่อย
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Python Selenium Webdriver Manager")
search_box.submit()

print("รอผลลัพธ์แป๊บนะ...")
# รอให้ผลลัพธ์ขึ้นมา เพื่อให้มั่นใจว่าโหลดเสร็จก่อนที่เราจะไปหา element อื่นๆ
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "search"))
)
print("เห็นผลลัพธ์แล้ว!")

# driver.quit() # ปิดเบราว์เซอร์เมื่อเสร็จงาน
# print("ปิดเบราว์เซอร์ละ")

เป็นไง? โคตรง่ายเลยใช่ป่ะ? ไม่ต้องมานั่งระบุ executable_path ให้วุ่นวายอีกแล้ว

คราวนี้ มาลองโค้ดที่จริงจังขึ้นมาอีกหน่อยนะ ลองเอาไปใช้สแครปเว็บอะไรเล็กๆ น้อยๆ ได้เลย สมมติว่าเราจะลองสแครปชื่อบทความจากหน้า blog ง่ายๆ ของตัวเอง:

# อันนี้โค้ดจริงจังขึ้นมาอีกหน่อย ลองเอาไปใช้สแครปเว็บอะไรเล็กๆ น้อยๆ ได้เลย
# สมมติเราจะลองสแครปชื่อบทความจากหน้า blog ง่ายๆ ของตัวเอง
print("\n--- เริ่มสแครปบทความ ---")
driver.get("https://cii3.net/blogs") # สมมติว่ามีหน้า blogs ในเว็บ cii3.net

try:
    # รอให้ element ที่มีบทความมันโผล่มานะ
    # อาจจะต้องดู selector ที่ถูกต้องของเว็บนั้นๆ ด้วยนะ อันนี้แค่ตัวอย่าง
    WebDriverWait(driver, 15).until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, "h2.blog-post-title a"))
    )

    titles = driver.find_elements(By.CSS_SELECTOR, "h2.blog-post-title a")
    print(f"เจอ {len(titles)} บทความ:")
    for i, title in enumerate(titles):
        print(f"- {i+1}. {title.text}")

except Exception as e:
    print(f"เอ้า! มีปัญหาตอนสแครปว่ะ: {e}")
    # นี่ไง! error ที่โคตรจะเจอประจำเวลาเขียน Selenium
    # ถ้าเจอพวก TimeoutException หรือ NoSuchElementException บ่อยๆ นะ
    # ลองเช็ค selector ดีๆ นะ แล้วก็ลองเพิ่มเวลาใน WebDriverWait ดู
    # บางทีเว็บมันโหลด dynamic content ช้ากว่าที่เราคิดเยอะเลย หรือไม่ก็ selector เราพลาดเองเลย
    print("\nปกติแล้วถ้าเจอ Error พวกนี้ (TimeoutException, NoSuchElementException) นะ")
    print("มันมักจะเกิดจาก:")
    print("1. Selector ผิด: ไป Inspect Element ดูดีๆ ว่าที่เราเขียน 'h2.blog-post-title a' มันถูกจริงๆ หรือเปล่า? อันนี้พลาดบ่อยสุดๆ")
    print("2. เว็บโหลดช้า: ลองเพิ่ม `WebDriverWait` จาก 15 เป็น 30 หรือมากกว่านั้นดู มันช่วยได้เยอะนะ")
    print("3. Element ยังไม่พร้อม: บางที element มันโผล่มาแต่ยังคลิกไม่ได้, ต้องใช้ `element_to_be_clickable` แทน `presence_of_element_located` ลองหาข้อมูลเพิ่มดูนะ")
    print("4. โดนบล็อก: บางเว็บอาจจะตรวจจับได้ว่าเราใช้ bot แล้วบล็อก IP เราเลยก็มีนะ อันนี้ต้องลองหา proxy หรือใช้ headless mode ดีๆ หรือไม่ก็ลดความถี่ในการ request")

finally:
    driver.quit()
    print("\nจบการทำงาน! ปิดเบราว์เซอร์เรียบร้อย.")

ความคิดเห็นส่วนตัว:

ส่วนตัวคือเลิฟ webdriver_manager มากๆ ครับ เพราะมันช่วยให้ชีวิต Selenium dev ง่ายขึ้นเยอะเลย ไม่ต้องมาเสียเวลาแก้เรื่อง driver เวอร์ชั่นไม่ตรงอีกต่อไปแล้ว. ใครที่ยังโหลด driver เองอยู่ ไปลองใช้ดูนะ ไม่ผิดหวังแน่นอน เชื่อดิ! การจัดการ driver แบบ auto นี่แหละคือทางออกที่ดีที่สุดแล้วสำหรับงาน automation หรือ scraping ด้วย Selenium. ใครใช้แล้วติดปัญหาอะไร ก็คอมเมนต์มาคุยกันได้นะ! ยินดีช่วยเท่าที่ทำได้เลย.

Read more

ไฮไลท์บอลโลก 2026: มหากาพย์ 48 ทีม เปิดฉากความตื่นเต้นที่คุณไม่ควรพลาด!

ไฮไลท์บอลโลก 2026: มหากาพย์ 48 ทีม เปิดฉากความตื่นเต้นที่คุณไม่ควรพลาด!

เกาะติดไฮไลท์บอลโลก 2026 ตั้งแต่นัดเปิดสนาม! สรุปผลการแข่งขันสุดเซอร์ไพรส์, ช่องทางดูบอลสดในไทยทั้งฟรีและพรีเมียม, โปรแกรมสำคัญ และทุกสิ่งที่ควรรู้.

By ทีมงาน devdog
ตารางคะแนนบอลโลก: ทุกแต้มมีความหมาย และปาฏิหาริย์ที่สั่นสะเทือนบัลลังก์

ตารางคะแนนบอลโลก: ทุกแต้มมีความหมาย และปาฏิหาริย์ที่สั่นสะเทือนบัลลังก์

เจาะลึกความสำคัญของตารางคะแนนบอลโลก พร้อมเรื่องราวสุดประทับใจของโวซินญา ผู้รักษาประตูเคปเวิร์ดที่สร้างปาฏิหาริย์หยุดสเปนในฟุตบอลโลก 2026.

By ทีมงาน devdog
ประธานเจ้าหน้าที่ฝ่ายกฎหมาย Take-Two ขายหุ้นมูลค่า 950,515 ดอลลาร์: สัญญาณอะไรที่นักลงทุนควรรู้?

ประธานเจ้าหน้าที่ฝ่ายกฎหมาย Take-Two ขายหุ้นมูลค่า 950,515 ดอลลาร์: สัญญาณอะไรที่นักลงทุนควรรู้?

ประธานเจ้าหน้าที่ฝ่ายกฎหมาย Take-Two ขายหุ้นเกือบ $1 ล้าน ท่ามกลางข่าวดี GTA 6 และรายได้คาดการณ์ $8 พันล้าน นักลงทุนควรรู้อะไร?

By ทีมงาน devdog