คุณกำลังพยายามตัดสินใจระหว่าง 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 และ macOS | Windows, 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
: เส้นทางไฟล์ที่จะบันทึก PDFformat
: รูปแบบกระดาษ (เช่น '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 สำหรับโปรเจ็กต์ที่ต้องการการขูดเว็บที่รวดเร็วและมีประสิทธิภาพคือตัวเลือกที่ดีที่สุดในบริบทนี้
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 สามารถปรับกระบวนการนี้ให้เหมาะสมยิ่งขึ้น มอบประสบการณ์การขูดที่ราบรื่น