Puppeteer กับ Selenium: จะเลือกอะไรดีสำหรับการขูดเว็บ?

เลือกและซื้อผู้รับมอบฉันทะ

Puppeteer กับ Selenium: จะเลือกอะไรดีสำหรับการขูดเว็บ?

คุณกำลังพยายามตัดสินใจระหว่าง Puppeteer และ Selenium สำหรับการขูดเว็บหรือไม่? ทั้งสองอย่างเป็นเฟรมเวิร์กการทำงานอัตโนมัติของเบราว์เซอร์ที่ทรงพลัง และการตัดสินใจเลือกที่ถูกต้องนั้นขึ้นอยู่กับความต้องการในการขูดเฉพาะของคุณและทรัพยากรที่มีอยู่

เพื่อช่วยให้คุณตัดสินใจได้อย่างมีข้อมูล เราได้เน้นความแตกต่างที่สำคัญระหว่าง Puppeteer และ Selenium ไว้ในตารางด้านล่าง หลังจากนั้น เราจะเจาะลึกรายละเอียดและจัดเตรียมตัวอย่างสำหรับแต่ละเฟรมเวิร์กเพื่อแสดงให้เห็นถึงประสิทธิภาพในการดึงข้อมูลจากหน้าเว็บ

เกณฑ์นักเชิดหุ่นซีลีเนียม
ภาษาที่เข้ากันได้รองรับเฉพาะ JavaScript อย่างเป็นทางการ แต่มีพอร์ต PHP และ Python อย่างไม่เป็นทางการJava, Python, C#, Ruby, PHP, JavaScript และ Kotlin
รองรับเบราว์เซอร์รองรับ Chromium และ Firefox รุ่นทดลองChrome, Safari, Firefox, Opera, Edge และ Internet Explorer
ผลงาน60% เร็วกว่าซีลีเนียมเร็ว
รองรับระบบปฏิบัติการWindows, Linux และ macOSWindows, Linux, macOS และ Solaris
สถาปัตยกรรมสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์พร้อมอินสแตนซ์ของเบราว์เซอร์แบบไม่มีส่วนหัวโปรโตคอล JSONWire บนไดรเวอร์เว็บเพื่อควบคุมอินสแตนซ์ของเบราว์เซอร์
ข้อกำหนดเบื้องต้นแพ็คเกจ JavaScript ก็เพียงพอแล้วSelenium Bindings (สำหรับภาษาการเขียนโปรแกรมที่เลือก) และไดรเวอร์เว็บเบราว์เซอร์
ชุมชนชุมชนเล็กกว่าเมื่อเปรียบเทียบกับซีลีเนียมเอกสารที่มีชื่อเสียงและชุมชนขนาดใหญ่

เรามาหารือเกี่ยวกับไลบรารีเหล่านี้โดยละเอียดและดำเนินการตัวอย่างการแยกส่วนเพื่อแสดงให้เห็นถึงประสิทธิภาพในการดึงข้อมูลจากหน้าเว็บ

โลโก้นักเชิดหุ่น

นักเชิดหุ่น

นักเชิดหุ่น เป็นไลบรารี Node.js ที่ให้ API ระดับสูงเพื่อควบคุม Chrome หรือ Chromium ผ่าน DevTools Protocol ได้รับการออกแบบมาเพื่อการทำงานอัตโนมัติใน Chrome หรือ Chromium เช่น การจับภาพหน้าจอ การสร้าง PDF และการนำทางหน้าต่างๆ

Puppeteer ยังสามารถใช้เพื่อทดสอบหน้าเว็บโดยจำลองการโต้ตอบของผู้ใช้ เช่น การคลิกปุ่ม กรอกแบบฟอร์ม และยืนยันผลลัพธ์ที่แสดง

ข้อดีของการเชิดหุ่น

  • สะดวกในการใช้: เรียบง่ายและใช้งานง่าย
  • มาพร้อมโครเมียม: ไม่จำเป็นต้องตั้งค่าเพิ่มเติม
  • โหมดหัวขาด: ทำงานในโหมดไม่มีหัวโดยค่าเริ่มต้น แต่สามารถกำหนดค่าให้ทำงานในโหมดเบราว์เซอร์เต็มรูปแบบได้
  • สถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์: ขจัดความจำเป็นในการเรียกโหมดสลีปด้วยตนเองในโค้ดของคุณ
  • ความสามารถที่ครอบคลุม: สามารถจับภาพหน้าจอ สร้าง PDF และดำเนินการเบราว์เซอร์ทั้งหมดโดยอัตโนมัติ
  • การจัดการประสิทธิภาพ: เสนอเครื่องมือสำหรับการบันทึกรันไทม์และประสิทธิภาพการโหลดเพื่อเพิ่มประสิทธิภาพและแก้ไขข้อบกพร่องของสแครปเปอร์ของคุณ
  • การรวบรวมข้อมูลสปา: สามารถรวบรวมข้อมูล Single Page Applications (SPA) และสร้างเนื้อหาที่แสดงผลล่วงหน้า (การแสดงผลฝั่งเซิร์ฟเวอร์)
  • การบันทึกสคริปต์: อนุญาตให้สร้างสคริปต์ Puppeteer โดยบันทึกการกระทำบนเบราว์เซอร์โดยใช้คอนโซล DevTools

ข้อเสียของ Puppeteer

  • การสนับสนุนเบราว์เซอร์ที่จำกัด: รองรับเบราว์เซอร์น้อยลงเมื่อเทียบกับ Selenium
  • เน้นจาวาสคริปต์: รองรับ JavaScript เป็นหลัก แม้ว่าจะมีพอร์ตที่ไม่เป็นทางการสำหรับ Python และ PHP ก็ตาม

ตัวอย่างการขูดเว็บด้วย Puppeteer

มาดูบทช่วยสอนการขูดเว็บ Puppeteer เพื่อแยกรายการจากหมวด Crime and Thriller ของเว็บไซต์ Danube

ร้านดานูบ: อาชญากรรมและระทึกขวัญ

ในการเริ่มต้น ให้นำเข้าโมดูล Puppeteer และสร้างฟังก์ชันอะซิงโครนัสเพื่อเรียกใช้โค้ด Puppeteer:

const puppeteer = require('puppeteer'); 

async function main() { 
    // Launch a headless browser instance 
    const browser = await puppeteer.launch({ headless: true });

    // Create a new page object 
    const page = await browser.newPage();

    // Navigate to the target URL and wait until the loading finishes
    await page.goto('https://danube-webshop.herokuapp.com/', { waitUntil: 'networkidle2' });

    // Wait for the left-side bar to load
    await page.waitForSelector('ul.sidebar-list');

    // Click on the first element and wait for the navigation to finish
    await Promise.all([
        page.waitForNavigation(),
        page.click("ul[class='sidebar-list'] > li > a"),
    ]);

    // Wait for the book previews to load
    await page.waitForSelector("li[class='preview']");

    // Extract the book previews
    const books = await page.evaluateHandle(
        () => [...document.querySelectorAll("li[class='preview']")]
    );

    // Extract the relevant data using page.evaluate
    const processed_data = await page.evaluate(elements => {
        let data = [];
        elements.forEach(element => {
            let title = element.querySelector("div.preview-title").innerHTML;
            let author = element.querySelector("div.preview-author").innerHTML;
            let rating = element.querySelector("div.preview-details > p.preview-rating").innerHTML;
            let price = element.querySelector("div.preview-details > p.preview-price").innerHTML;

            let result = { title, author, rating, price };
            data.push(result);
        });
        return data;
    }, books);

    // Print out the extracted data
    console.log(processed_data);

    // Close the page and browser respectively
    await page.close();
    await browser.close();
}

// Run the main function to scrape the data
main();

ผลลัพธ์ที่คาดหวัง

เมื่อคุณเรียกใช้โค้ด ผลลัพธ์ควรมีลักษณะต่อไปนี้:

[
    {
        title: 'Does the Sun Also Rise?',
        author: 'Ernst Doubtingway',
        rating: '★★★★☆',
        price: '$9.95'
    },
    {
        title: 'The Insiders',
        author: 'E. S. Hilton',
        rating: '★★★★☆',
        price: '$9.95'
    },
    {
        title: 'A Citrussy Clock',
        author: 'Bethany Urges',
        rating: '★★★★★',
        price: '$9.95'
    }
]

อีกตัวอย่างหนึ่งของการใช้ Puppeteer

นอกเหนือจากการดึงข้อมูลจากหน้าเว็บแล้ว Puppeteer ยังสามารถใช้เพื่องานอัตโนมัติที่หลากหลายอีกด้วย กรณีการใช้งานทั่วไปประการหนึ่งคือการสร้าง PDF ของหน้าเว็บ มาดูตัวอย่างการใช้ Puppeteer เพื่อสร้าง PDF จากหน้าเว็บกัน

การสร้าง PDF ด้วย Puppeteer

ขั้นตอนที่ 1: นำเข้า Puppeteer และสร้างฟังก์ชันอะซิงโครนัส

const puppeteer = require('puppeteer');

async function generatePDF() {
    // Launch a headless browser instance
    const browser = await puppeteer.launch({ headless: true });

    // Create a new page object
    const page = await browser.newPage();

    // Navigate to the target URL
    await page.goto('https://example.com', { waitUntil: 'networkidle2' });

    // Generate a PDF from the web page
    await page.pdf({
        path: 'example.pdf', // Output file path
        format: 'A4',        // Paper format
        printBackground: true, // Include background graphics
    });

    // Close the page and browser respectively
    await page.close();
    await browser.close();
}

// Run the function to generate the PDF
generatePDF();

ตัวเลือกนักเชิดหุ่นเพิ่มเติม

Puppeteer มีตัวเลือกมากมายสำหรับการสร้าง PDF ที่สามารถปรับแต่งให้เหมาะกับความต้องการของคุณได้ นี่คือตัวเลือกบางส่วนที่คุณสามารถใช้ได้:

  • path: เส้นทางไฟล์ที่จะบันทึก PDF
  • format: รูปแบบกระดาษ (เช่น 'A4', 'Letter')
  • printBackground: ไม่ว่าจะรวมกราฟิกพื้นหลังหรือไม่
  • landscape: ตั้งค่าให้ true สำหรับการวางแนวแนวนอน
  • margin: ระบุระยะขอบสำหรับ PDF (บน, ขวา, ล่าง, ซ้าย)

ตัวอย่างพร้อมตัวเลือกเพิ่มเติม:

const puppeteer = require('puppeteer');

async function generatePDF() {
    const browser = await puppeteer.launch({ headless: true });
    const page = await browser.newPage();
    await page.goto('https://example.com', { waitUntil: 'networkidle2' });

    await page.pdf({
        path: 'example.pdf',
        format: 'A4',
        printBackground: true,
        landscape: true,
        margin: {
            top: '20px',
            right: '20px',
            bottom: '20px',
            left: '20px',
        },
    });

    await page.close();
    await browser.close();
}

generatePDF();

ตัวอย่างเอาท์พุต

การรันโค้ดด้านบนจะสร้างไฟล์ PDF ชื่อ example.pdf ในไดเร็กทอรีปัจจุบันที่มีเนื้อหาของหน้าเว็บ https://example.com.

Puppeteer เป็นเครื่องมืออเนกประสงค์สำหรับงานเว็บอัตโนมัติ ตั้งแต่การดึงข้อมูลไปจนถึงการสร้าง PDF ความสะดวกในการใช้งานและคุณสมบัติอันทรงพลังทำให้เป็นตัวเลือกที่ยอดเยี่ยมสำหรับกิจกรรมเบราว์เซอร์ที่หลากหลายโดยอัตโนมัติ ไม่ว่าคุณจะดึงข้อมูล สร้างรายงาน หรือทดสอบหน้าเว็บ Puppeteer มีเครื่องมือที่คุณต้องการเพื่อให้งานสำเร็จลุล่วงได้อย่างมีประสิทธิภาพ

โลโก้ซีลีเนียม

ซีลีเนียม

ซีลีเนียม คือเครื่องมือการทดสอบแบบ end-to-end แบบโอเพ่นซอร์สและเครื่องมืออัตโนมัติของเว็บที่มักใช้สำหรับการขูดเว็บ ส่วนประกอบหลัก ได้แก่ Selenium IDE, Selenium WebDriver และ Selenium Grid

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

ข้อดีของซีลีเนียม

  • สะดวกในการใช้: เรียบง่ายและใช้งานง่าย
  • รองรับภาษา: รองรับภาษาการเขียนโปรแกรมที่หลากหลาย เช่น Python, Java, JavaScript, Ruby และ C#
  • เบราว์เซอร์อัตโนมัติ: สามารถทำให้เบราว์เซอร์เช่น Firefox, Edge, Safari และแม้แต่เบราว์เซอร์ QtWebKit ที่กำหนดเองได้โดยอัตโนมัติ
  • ความสามารถในการขยายขนาด: สามารถปรับขนาด Selenium เป็นหลายร้อยอินสแตนซ์ได้โดยใช้เซิร์ฟเวอร์คลาวด์ที่มีการตั้งค่าเบราว์เซอร์ที่แตกต่างกัน
  • ข้ามแพลตฟอร์ม: ทำงานบน Windows, macOS และ Linux

ข้อเสียของซีลีเนียม

  • การตั้งค่าที่ซับซ้อน: วิธีการตั้งค่าซีลีเนียมอาจซับซ้อน

ตัวอย่างการขูดเว็บด้วยซีลีเนียม

เช่นเดียวกับ Puppeteer เรามาดูบทช่วยสอนเกี่ยวกับการขูดเว็บด้วย Selenium โดยใช้ไซต์เป้าหมายเดียวกันกัน เราจะแยกตัวอย่างหนังสือออกจากหมวดอาชญากรรมและระทึกขวัญของเว็บไซต์ดานูบ

ร้านดานูบ: อาชญากรรมและระทึกขวัญ

ขั้นตอนที่ 1: นำเข้าโมดูลที่จำเป็นและกำหนดค่าซีลีเนียม

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_argument("--headless")

ขั้นตอนที่ 2: เริ่มต้น Chrome WebDriver

driver = webdriver.Chrome(options=options)

ขั้นตอนที่ 3: ไปที่เว็บไซต์เป้าหมาย

time.sleep(1)
crime_n_thrillers = driver.find_element(By.CSS_SELECTOR, "ul[class='sidebar-list'] > li")
crime_n_thrillers.click()
time.sleep(1)
books = driver.find_elements(By.CSS_SELECTOR, "div.shop-content li.preview")

ขั้นตอนที่ 4: คลิกที่หมวดหมู่ Crime & Thrillers และแยกตัวอย่างหนังสือ

time.sleep(1)
crime_n_thrillers = driver.find_element(By.CSS_SELECTOR, "ul[class='sidebar-list'] > li")
crime_n_thrillers.click()
time.sleep(1)
books = driver.find_elements(By.CSS_SELECTOR, "div.shop-content li.preview")

ขั้นตอนที่ 5: กำหนดฟังก์ชันเพื่อแยกข้อมูลจากการแสดงตัวอย่างหนังสือแต่ละเล่ม

def extract(element):
    title = element.find_element(By.CSS_SELECTOR, "div.preview-title").text
    author = element.find_element(By.CSS_SELECTOR, "div.preview-author").text
    rating = element.find_element(By.CSS_SELECTOR, "div.preview-details p.preview-rating").text
    price = element.find_element(By.CSS_SELECTOR, "div.preview-details p.preview-price").text
    return {"title": title, "author": author, "rating": rating, "price": price}

ขั้นตอนที่ 6: วนดูตัวอย่าง แยกข้อมูล และออกจากไดรเวอร์

extracted_data = []
for element in books:
    data = extract(element)
    extracted_data.append(data)

print(extracted_data)
driver.quit()

ผลลัพธ์ที่คาดหวัง

การรันโค้ดด้านบนจะสร้างผลลัพธ์ที่คล้ายกับตัวอย่างต่อไปนี้:

[
    {'title': 'Does the Sun Also Rise?', 'author': 'Ernst Doubtingway', 'rating': '★★★★☆', 'price': '$9.95'},
    {'title': 'The Insiders', 'author': 'E. S. Hilton', 'rating': '★★★★☆', 'price': '$9.95'},
    {'title': 'A Citrussy Clock', 'author': 'Bethany Urges', 'rating': '★★★★★', 'price': '$9.95'}
]

ตัวอย่างซีลีเนียมเพิ่มเติม: การจับภาพหน้าจอ

นอกเหนือจากการคัดลอกข้อมูลแล้ว Selenium ยังสามารถใช้เพื่อจับภาพหน้าจอของหน้าเว็บได้อีกด้วย นี่คือตัวอย่างวิธีจับภาพหน้าจอของหน้าเว็บโดยใช้ Selenium

ขั้นตอนที่ 1: นำเข้าโมดูลที่จำเป็นและกำหนดค่าซีลีเนียม

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--headless")

ขั้นตอนที่ 2: เริ่มต้น Chrome WebDriver

driver = webdriver.Chrome(options=options)

ขั้นตอนที่ 3: ไปที่เว็บไซต์เป้าหมาย

url = "https://example.com"
driver.get(url)

ขั้นตอนที่ 4: ถ่ายภาพหน้าจอ

driver.save_screenshot("example_screenshot.png")

ขั้นตอนที่ 5: ออกจากไดรเวอร์

driver.quit()

Selenium เป็นเครื่องมืออเนกประสงค์สำหรับงานระบบอัตโนมัติของเว็บ รวมถึงการขูดเว็บและการจับภาพหน้าจอ การรองรับภาษาโปรแกรมและเบราว์เซอร์หลายภาษา รวมถึงความสามารถในการปรับขนาด ทำให้เป็นตัวเลือกที่ทรงพลังสำหรับความต้องการระบบอัตโนมัติที่หลากหลาย ไม่ว่าคุณจะดึงข้อมูลหรือสร้างรายงาน Selenium ก็มอบความสามารถในการทำให้งานของคุณเป็นอัตโนมัติได้อย่างมีประสิทธิภาพ

Puppeteer กับ Selenium: การเปรียบเทียบความเร็ว

Puppeteer เร็วกว่า Selenium หรือไม่? คำตอบคือใช่ โดยทั่วไปแล้ว Puppeteer จะเร็วกว่า Selenium

เพื่อเปรียบเทียบความเร็วของ Puppeteer และ Selenium เราใช้ Sandbox ของ Danube-store และรันสคริปต์ที่นำเสนอข้างต้น 20 ครั้ง โดยเฉลี่ยเวลาในการดำเนินการ

การทดสอบความเร็วของซีลีเนียม

เราใช้ time โมดูลใน Python เพื่อวัดเวลาดำเนินการของสคริปต์ Selenium เวลาเริ่มต้นจะถูกบันทึกไว้ที่จุดเริ่มต้นและเวลาสิ้นสุดที่ส่วนท้ายของสคริปต์ ความแตกต่างระหว่างเวลาเหล่านี้ทำให้ระยะเวลาการดำเนินการทั้งหมด

นี่คือสคริปต์ฉบับสมบูรณ์ที่ใช้สำหรับซีลีเนียม:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def extract(element):
    title = element.find_element(By.CSS_SELECTOR, "div.preview-title").text
    author = element.find_element(By.CSS_SELECTOR, "div.preview-author").text
    rating = element.find_element(By.CSS_SELECTOR, "div.preview-details p.preview-rating").text
    price = element.find_element(By.CSS_SELECTOR, "div.preview-details p.preview-price").text
    return {"title": title, "author": author, "rating": rating, "price": price}

# Start the timer
start_time = time.time()

options = webdriver.ChromeOptions()
options.add_argument("--headless")

# Create a new instance of the Chrome driver
driver = webdriver.Chrome(options=options)

url = "https://danube-webshop.herokuapp.com/"
driver.get(url)

# Click on the Crime & Thrillers category
time.sleep(1)
crime_n_thrillers = driver.find_element(By.CSS_SELECTOR, "ul[class='sidebar-list'] > li")
crime_n_thrillers.click()
time.sleep(1)

# Extract the book previews
books = driver.find_elements(By.CSS_SELECTOR, "div.shop-content li.preview")

extracted_data = []
for element in books:
    data = extract(element)
    extracted_data.append(data)

print(extracted_data)

# End the timer
end_time = time.time()
print(f"The whole script took: {end_time - start_time:.4f} seconds")

driver.quit()

ทดสอบความเร็วนักเชิดหุ่น

สำหรับสคริปต์ Puppeteer เราใช้ไฟล์ Date วัตถุเพื่อวัดเวลาดำเนินการ เวลาเริ่มต้นจะถูกบันทึกไว้ที่จุดเริ่มต้นและเวลาสิ้นสุดที่ส่วนท้ายของสคริปต์ ความแตกต่างระหว่างเวลาเหล่านี้ทำให้ระยะเวลาการดำเนินการทั้งหมด

นี่คือสคริปต์ฉบับเต็มที่ใช้สำหรับ Puppeteer:

const puppeteer = require('puppeteer');

async function main() {
    const start = Date.now();

    const browser = await puppeteer.launch({ headless: true });
    const page = await browser.newPage();
    await page.goto('https://danube-webshop.herokuapp.com/', { waitUntil: 'networkidle2' });

    await page.waitForSelector('ul.sidebar-list');

    await Promise.all([
        page.waitForNavigation(),
        page.click("ul[class='sidebar-list'] > li > a"),
    ]);

    await page.waitForSelector("li[class='preview']");
    const books = await page.evaluateHandle(
        () => [...document.querySelectorAll("li[class='preview']")]
    );

    const processed_data = await page.evaluate(elements => {
        let data = [];
        elements.forEach(element => {
            let title = element.querySelector("div.preview-title").innerHTML;
            let author = element.querySelector("div.preview-author").innerHTML;
            let rating = element.querySelector("div.preview-details > p.preview-rating").innerHTML;
            let price = element.querySelector("div.preview-details > p.preview-price").innerHTML;

            let result = { title, author, rating, price };
            data.push(result);
        });
        return data;
    }, books);

    console.log(processed_data);
    await page.close();
    await browser.close();

    const end = Date.now();
    console.log(`Execution time: ${(end - start) / 1000} seconds`);
}

main();

ผลการทดสอบประสิทธิภาพ

การทดสอบประสิทธิภาพพบว่า Puppeteer เร็วกว่า Selenium ประมาณ 60% ข้อได้เปรียบด้านความเร็วนี้ทำให้ Puppeteer เป็นตัวเลือกที่เหมาะสมมากขึ้นสำหรับโครงการที่ต้องการการขูดเว็บความเร็วสูงและระบบอัตโนมัติ โดยเฉพาะอย่างยิ่งเมื่อทำงานกับเบราว์เซอร์ที่ใช้ Chromium

สรุปผลความเร็ว:

การทดสอบความเร็วของ Puppeteer กับ Selenium

แผนภูมิด้านล่างแสดงความแตกต่างด้านประสิทธิภาพระหว่าง Puppeteer และ Selenium:

การขยายขนาดแอปพลิเคชัน Puppeteer สำหรับโปรเจ็กต์ที่ต้องการการขูดเว็บที่รวดเร็วและมีประสิทธิภาพคือตัวเลือกที่ดีที่สุดในบริบทนี้

Puppeteer กับ Selenium: ไหนดีกว่ากัน?

แล้วอันไหนดีกว่าระหว่าง Selenium กับ Puppeteer สำหรับการขูด? ไม่มีคำตอบโดยตรงสำหรับคำถามนั้น เนื่องจากขึ้นอยู่กับปัจจัยหลายประการ เช่น การสนับสนุนห้องสมุดในระยะยาว การสนับสนุนข้ามเบราว์เซอร์ และความต้องการในการขูดเว็บของคุณ

Puppeteer เร็วกว่า แต่เมื่อเทียบกับ Selenium มันรองรับเบราว์เซอร์น้อยกว่า ซีลีเนียมยังรองรับภาษาการเขียนโปรแกรมมากกว่าเมื่อเปรียบเทียบกับ Puppeteer

บทสรุป

แม้ว่าการใช้ Puppeteer หรือ Selenium จะเป็นตัวเลือกที่ดีสำหรับการขูดเว็บ แต่การขยายขนาดและเพิ่มประสิทธิภาพโปรเจ็กต์การขูดเว็บของคุณอาจเป็นเรื่องที่ท้าทาย เนื่องจากมาตรการต่อต้านบอทขั้นสูงสามารถตรวจจับและบล็อกไลบรารีเหล่านี้ได้ วิธีที่ดีที่สุดในการหลีกเลี่ยงปัญหานี้คือการใช้ Web Scraping API เช่น OneProxy

การใช้ Puppeteer กับพร็อกซีเซิร์ฟเวอร์

หากต้องการใช้ Puppeteer กับพร็อกซีเซิร์ฟเวอร์ คุณสามารถส่งการตั้งค่าพร็อกซีใน args ตัวเลือกเมื่อเปิดใช้งานอินสแตนซ์เบราว์เซอร์ นี่คือตัวอย่าง:

const puppeteer = require('puppeteer');

async function main() {
    const proxyServer = 'http://your-proxy-server:port';
    
    const browser = await puppeteer.launch({
        headless: true,
        args: [`--proxy-server=${proxyServer}`]
    });

    const page = await browser.newPage();
    await page.goto('https://example.com', { waitUntil: 'networkidle2' });

    // Perform your web scraping tasks here

    await browser.close();
}

main();

การใช้ซีลีเนียมกับพร็อกซีเซิร์ฟเวอร์

หากต้องการใช้ Selenium กับพร็อกซีเซิร์ฟเวอร์ คุณสามารถตั้งค่าตัวเลือกพร็อกซีได้โดยใช้ webdriver.Proxy ระดับ. นี่คือตัวอย่าง:

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = "your-proxy-server:port"
proxy.ssl_proxy = "your-proxy-server:port"

capabilities = webdriver.DesiredCapabilities.CHROME
proxy.add_to_capabilities(capabilities)

options = webdriver.ChromeOptions()
options.add_argument("--headless")

driver = webdriver.Chrome(desired_capabilities=capabilities, options=options)
driver.get("https://example.com")

# Perform your web scraping tasks here

driver.quit()

การใช้พร็อกซีเซิร์ฟเวอร์กับ Puppeteer และ Selenium สามารถช่วยหลีกเลี่ยงข้อจำกัดตาม IP และลดความเสี่ยงที่จะถูกบล็อก เพิ่มประสิทธิภาพของงานขูดเว็บของคุณ พร็อกซีหมุนเวียนของ OneProxy สามารถปรับกระบวนการนี้ให้เหมาะสมยิ่งขึ้น มอบประสบการณ์การขูดที่ราบรื่น

คำถามที่พบบ่อย (FAQ)

Puppeteer และ Selenium เป็นทั้งเฟรมเวิร์กการทำงานอัตโนมัติของเบราว์เซอร์ที่ใช้สำหรับการขูดเว็บ การทดสอบ และการทำงานอัตโนมัติของเบราว์เซอร์ Puppeteer เป็นไลบรารี Node.js ที่ควบคุม Chrome หรือ Chromium ผ่าน DevTools Protocol ในขณะที่ Selenium เป็นเครื่องมือโอเพ่นซอร์สที่รองรับเบราว์เซอร์และภาษาการเขียนโปรแกรมที่หลากหลายผ่าน WebDriver API

โดยทั่วไป Puppeteer จะเร็วกว่า Selenium อย่างไรก็ตาม ความแตกต่างของความเร็วอาจแตกต่างกันไปขึ้นอยู่กับงานและการกำหนดค่าเฉพาะที่ใช้ใน Web Scraping หรือโปรเจ็กต์ระบบอัตโนมัติของคุณ

Puppeteer ขึ้นชื่อในเรื่องความสะดวกในการใช้งาน ความเร็ว และความสามารถในการทำงานอัตโนมัติในโหมดไม่มีหัวโดยค่าเริ่มต้น รองรับ Chromium และมีสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ที่แข็งแกร่ง ซึ่งช่วยลดความจำเป็นในการเรียกโหมดสลีปด้วยตนเองในโค้ด

Puppeteer รองรับเบราว์เซอร์น้อยกว่าเมื่อเทียบกับ Selenium และเน้นไปที่ JavaScript เป็นหลัก แม้ว่าจะมีพอร์ตที่ไม่เป็นทางการสำหรับภาษาอื่น เช่น Python และ PHP ก็ตาม

คุณสามารถกำหนดค่า Puppeteer ให้ใช้พร็อกซีเซิร์ฟเวอร์โดยส่งการตั้งค่าพร็อกซีใน args ตัวเลือกเมื่อเปิดเบราว์เซอร์

Selenium รองรับภาษาการเขียนโปรแกรมหลายภาษา (Python, Java, JavaScript, Ruby, C#) และสามารถทำให้เบราว์เซอร์ต่างๆ เป็นแบบอัตโนมัติ รวมถึง Firefox, Edge, Safari และเบราว์เซอร์แบบกำหนดเอง เช่น QtWebKit นอกจากนี้ยังช่วยให้สามารถปรับขนาดได้อย่างกว้างขวางผ่านเทคนิคต่างๆ เช่น การตั้งค่าเซิร์ฟเวอร์คลาวด์ด้วยการตั้งค่าเบราว์เซอร์ที่แตกต่างกัน

ซีลีเนียมอาจมีความซับซ้อนในการตั้งค่ามากกว่าเมื่อเทียบกับ Puppeteer โดยเฉพาะอย่างยิ่งเมื่อกำหนดค่าสำหรับเบราว์เซอร์และสภาพแวดล้อมที่แตกต่างกัน

คุณสามารถตั้งค่าพร็อกซีเซิร์ฟเวอร์ใน Selenium ได้โดยใช้ webdriver.Proxy ระดับ.

เรารันงานขูดเว็บแบบเดียวกันบนแซนด์บ็อกซ์ร้านค้าดานูบโดยใช้ทั้ง Puppeteer และ Selenium แต่ละสคริปต์ถูกดำเนินการ 20 ครั้ง และคำนวณเวลาดำเนินการโดยเฉลี่ยเพื่อเปรียบเทียบประสิทธิภาพ

ผลการวิจัยพบว่า Puppeteer เร็วกว่า Selenium ประมาณ 60% ทำให้เป็นตัวเลือกที่ดีกว่าสำหรับงานขูดเว็บและงานอัตโนมัติที่มีความเร็วสูง

OneProxy สามารถช่วยให้คุณหลีกเลี่ยงการถูกบล็อกได้ OneProxy จัดการการเลี่ยงผ่านแอนตี้บอท มอบการหมุนพร็อกซี เบราว์เซอร์แบบไม่มีส่วนหัว การลองใหม่อัตโนมัติ และอื่นๆ อีกมากมาย รับประกันประสบการณ์การขูดเว็บที่ราบรื่น

พร็อกซีดาต้าเซ็นเตอร์
พรอกซีที่ใช้ร่วมกัน

พร็อกซีเซิร์ฟเวอร์ที่เชื่อถือได้และรวดเร็วจำนวนมาก

เริ่มต้นที่$0.06 ต่อ IP
การหมุนพร็อกซี
การหมุนพร็อกซี

พร็อกซีหมุนเวียนไม่จำกัดพร้อมรูปแบบการจ่ายต่อการร้องขอ

เริ่มต้นที่$0.0001 ต่อคำขอ
พร็อกซีส่วนตัว
พร็อกซี UDP

พร็อกซีที่รองรับ UDP

เริ่มต้นที่$0.4 ต่อ IP
พร็อกซีส่วนตัว
พร็อกซีส่วนตัว

พรอกซีเฉพาะสำหรับการใช้งานส่วนบุคคล

เริ่มต้นที่$5 ต่อ IP
พร็อกซีไม่จำกัด
พร็อกซีไม่จำกัด

พร็อกซีเซิร์ฟเวอร์ที่มีการรับส่งข้อมูลไม่จำกัด

เริ่มต้นที่$0.06 ต่อ IP
พร้อมใช้พร็อกซีเซิร์ฟเวอร์ของเราแล้วหรือยัง?
ตั้งแต่ $0.06 ต่อ IP