CAPSOLVER
Blog
Lấy dữ liệu web với SeleniumBase và Python trong năm 2024

Lấy dữ liệu web với SeleniumBase và Python năm 2024

Logo of CapSolver

Rajinder Singh

Deep Learning Researcher

05-Nov-2024

Web scraping là một công cụ mạnh mẽ để trích xuất dữ liệu, nghiên cứu thị trường và tự động hóa. Tuy nhiên, CAPTCHA có thể cản trở nỗ lực tự động hóa scraping. Trong hướng dẫn này, chúng ta sẽ khám phá cách sử dụng SeleniumBase để web scraping và tích hợp CapSolver để giải quyết CAPTCHA một cách hiệu quả, sử dụng quotes.toscrape.com làm trang web ví dụ của chúng tôi.

Giới thiệu về SeleniumBase

SeleniumBase là một framework Python giúp đơn giản hóa tự động hóa web và kiểm thử. Nó mở rộng khả năng của Selenium WebDriver với một API thân thiện với người dùng hơn, các trình chọn nâng cao, chờ đợi tự động và các công cụ kiểm thử bổ sung.

Cài đặt SeleniumBase

Trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt Python 3 trên hệ thống của mình. Làm theo các bước sau để cài đặt SeleniumBase:

  1. Cài đặt SeleniumBase:

    bash Copy
    pip install seleniumbase
  2. Xác minh cài đặt:

    bash Copy
    sbase --help

Bộ scraping cơ bản với SeleniumBase

Hãy bắt đầu bằng cách tạo một script đơn giản điều hướng đến quotes.toscrape.com và trích xuất trích dẫn và tác giả.

Ví dụ: Scraping trích dẫn và tác giả của chúng từ trang chủ.

python Copy
# scrape_quotes.py

from seleniumbase import BaseCase

class QuotesScraper(BaseCase):
    def test_scrape_quotes(self):
        self.open("https://quotes.toscrape.com/")
        quotes = self.find_elements("div.quote")
        for quote in quotes:
            text = quote.find_element("span.text").text
            author = quote.find_element("small.author").text
            print(f"\"{text}\" - {author}")

if __name__ == "__main__":
    QuotesScraper().main()

Chạy script:

bash Copy
python scrape_quotes.py

Kết quả:

Copy
“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.” - Albert Einstein
...

Các ví dụ web scraping nâng cao hơn

Để nâng cao kỹ năng web scraping của bạn, hãy khám phá các ví dụ nâng cao hơn bằng cách sử dụng SeleniumBase.

Scraping nhiều trang (Phân trang)

Nhiều trang web hiển thị nội dung trên nhiều trang. Hãy sửa đổi script của chúng ta để điều hướng qua tất cả các trang và scraping trích dẫn.

python Copy
# scrape_quotes_pagination.py

from seleniumbase import BaseCase

class QuotesPaginationScraper(BaseCase):
    def test_scrape_all_quotes(self):
        self.open("https://quotes.toscrape.com/")
        while True:
            quotes = self.find_elements("div.quote")
            for quote in quotes:
                text = quote.find_element("span.text").text
                author = quote.find_element("small.author").text
                print(f"\"{text}\" - {author}")

            # Kiểm tra xem có trang tiếp theo không
            if self.is_element_visible('li.next > a'):
                self.click('li.next > a')
            else:
                break

if __name__ == "__main__":
    QuotesPaginationScraper().main()

Giải thích:

  • Chúng ta lặp qua các trang bằng cách kiểm tra xem nút "Next" có sẵn hay không.
  • Chúng ta sử dụng is_element_visible để kiểm tra nút "Next".
  • Chúng ta nhấp vào nút "Next" để điều hướng đến trang tiếp theo.

Xử lý nội dung động với AJAX

Một số trang web tải nội dung động bằng cách sử dụng AJAX. SeleniumBase có thể xử lý các trường hợp như vậy bằng cách chờ đợi các phần tử được tải.

Ví dụ: Scraping thẻ từ trang web, được tải động.

python Copy
# scrape_dynamic_content.py

from seleniumbase import BaseCase

class TagsScraper(BaseCase):
    def test_scrape_tags(self):
        self.open("https://quotes.toscrape.com/")
        # Nhấp vào liên kết 'Top Ten tags' để tải thẻ động
        self.click('a[href="/tag/"]')
        self.wait_for_element("div.tags-box")
        tags = self.find_elements("span.tag-item > a")
        for tag in tags:
            tag_name = tag.text
            print(f"Tag: {tag_name}")

if __name__ == "__main__":
    TagsScraper().main()

Giải thích:

  • Chúng ta chờ đợi phần tử div.tags-box để đảm bảo nội dung động được tải.
  • wait_for_element đảm bảo rằng script không tiến hành cho đến khi phần tử có sẵn.

Gửi biểu mẫu và đăng nhập

Đôi khi, bạn cần đăng nhập vào một trang web trước khi scraping nội dung. Dưới đây là cách bạn có thể xử lý việc gửi biểu mẫu.

Ví dụ: Đăng nhập vào trang web và scraping trích dẫn từ trang của người dùng đã xác thực.

python Copy
# scrape_with_login.py

from seleniumbase import BaseCase

class LoginScraper(BaseCase):
    def test_login_and_scrape(self):
        self.open("https://quotes.toscrape.com/login")
        # Điền vào biểu mẫu đăng nhập
        self.type("input#username", "testuser")
        self.type("input#password", "testpass")
        self.click("input[type='submit']")

        # Xác minh đăng nhập bằng cách kiểm tra liên kết đăng xuất
        if self.is_element_visible('a[href="/logout"]'):
            print("Logged in successfully!")

            # Bây giờ scraping các trích dẫn
            self.open("https://quotes.toscrape.com/")
            quotes = self.find_elements("div.quote")
            for quote in quotes:
                text = quote.find_element("span.text").text
                author = quote.find_element("small.author").text
                print(f"\"{text}\" - {author}")
        else:
            print("Login failed.")

if __name__ == "__main__":
    LoginScraper().main()

Giải thích:

  • Chúng ta điều hướng đến trang đăng nhập và điền vào thông tin xác thực.
  • Sau khi gửi biểu mẫu, chúng ta xác minh đăng nhập bằng cách kiểm tra sự hiện diện của liên kết đăng xuất.
  • Sau đó, chúng ta tiến hành scraping nội dung có sẵn cho người dùng đã đăng nhập.

Lưu ý:quotes.toscrape.com cho phép bất kỳ tên người dùng và mật khẩu nào để trình diễn, chúng ta có thể sử dụng thông tin xác thực giả.

Trích xuất dữ liệu từ bảng

Các trang web thường hiển thị dữ liệu trong bảng. Dưới đây là cách để trích xuất dữ liệu bảng.

Ví dụ: Scraping dữ liệu từ một bảng (ví dụ giả định vì trang web không có bảng).

python Copy
# scrape_table.py

from seleniumbase import BaseCase

class TableScraper(BaseCase):
    def test_scrape_table(self):
        self.open("https://www.example.com/table-page")
        # Chờ đợi bảng được tải
        self.wait_for_element("table#data-table")
        rows = self.find_elements("table#data-table > tbody > tr")
        for row in rows:
            cells = row.find_elements("td")
            row_data = [cell.text for cell in cells]
            print(row_data)

if __name__ == "__main__":
    TableScraper().main()

Giải thích:

  • Chúng ta xác định vị trí của bảng bằng ID hoặc lớp của nó.
  • Chúng ta lặp qua từng hàng và sau đó lặp qua từng ô để trích xuất dữ liệu.
  • quotes.toscrape.com không có bảng, hãy thay thế URL bằng một trang web thực tế có chứa bảng.

Tích hợp CapSolver vào SeleniumBase

Mặc dù quotes.toscrape.com không có CAPTCHA, nhưng nhiều trang web trong thế giới thực lại có. Để chuẩn bị cho những trường hợp như vậy, chúng ta sẽ chứng minh cách tích hợp CapSolver vào script SeleniumBase của chúng ta bằng cách sử dụng phần mở rộng trình duyệt CapSolver.

Cách giải quyết captcha với SeleniumBase sử dụng Capsolver

  1. Tải xuống phần mở rộng CapSolver:

    • Truy cập trang phát hành CapSolver GitHub.
    • Tải xuống phiên bản mới nhất của phần mở rộng trình duyệt CapSolver.
    • Giải nén phần mở rộng vào một thư mục ở gốc dự án của bạn, ví dụ: ./capsolver_extension.

Cấu hình phần mở rộng CapSolver

  1. Xác định vị trí tệp cấu hình:

    • Tìm tệp config.json nằm trong thư mục capsolver_extension/assets.
  2. Cập nhật cấu hình:

    • Đặt enabledForcaptcha và/hoặc enabledForRecaptchaV2 thành true tùy thuộc vào loại CAPTCHA bạn muốn giải quyết.
    • Đặt captchaMode hoặc reCaptchaV2Mode thành "token" để tự động giải quyết.

    Ví dụ config.json:

    json Copy
    {
      "apiKey": "YOUR_CAPSOLVER_API_KEY",
      "enabledForcaptcha": true,
      "captchaMode": "token",
      "enabledForRecaptchaV2": true,
      "reCaptchaV2Mode": "token",
      "solveInvisibleRecaptcha": true,
      "verbose": false
    }
    • Thay thế "YOUR_CAPSOLVER_API_KEY" bằng khóa API CapSolver thực tế của bạn.

Tải phần mở rộng CapSolver trong SeleniumBase

Để sử dụng phần mở rộng CapSolver trong SeleniumBase, chúng ta cần cấu hình trình duyệt để tải phần mở rộng khi nó khởi động.

  1. Sửa đổi script SeleniumBase của bạn:

    • Nhập ChromeOptions từ selenium.webdriver.chrome.options.
    • Cài đặt các tùy chọn để tải phần mở rộng CapSolver.

    Ví dụ:

    python Copy
    from seleniumbase import BaseCase
    from selenium.webdriver.chrome.options import Options as ChromeOptions
    import os
    
    class QuotesScraper(BaseCase):
        def setUp(self):
            super().setUp()
    
            # Đường dẫn đến phần mở rộng CapSolver
            extension_path = os.path.abspath('capsolver_extension')
    
            # Cấu hình tùy chọn Chrome
            options = ChromeOptions()
            options.add_argument(f"--load-extension={extension_path}")
            options.add_argument("--disable-gpu")
            options.add_argument("--no-sandbox")
    
            # Cập nhật trình điều khiển bằng các tùy chọn mới
            self.driver.quit()
            self.driver = self.get_new_driver(browser_name="chrome", options=options)
  2. Đảm bảo đường dẫn phần mở rộng là chính xác:

    • Hãy đảm bảo rằng extension_path trỏ đến thư mục nơi bạn đã giải nén phần mở rộng CapSolver.

Ví dụ script tích hợp CapSolver

Dưới đây là một script đầy đủ tích hợp CapSolver vào SeleniumBase để tự động giải quyết CAPTCHA. Chúng ta sẽ tiếp tục sử dụng https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php làm trang web ví dụ của chúng ta.

python Copy
# scrape_quotes_with_capsolver.py
from seleniumbase import BaseCase
from selenium.webdriver.chrome.options import Options as ChromeOptions
import os

class QuotesScraper(BaseCase):
    def setUp(self):
        super().setUp()

        # Đường dẫn đến thư mục phần mở rộng CapSolver
        # Đảm bảo đường dẫn này trỏ đến thư mục phần mở rộng Chrome CapSolver một cách chính xác
        extension_path = os.path.abspath('capsolver_extension')

        # Cấu hình tùy chọn Chrome
        options = ChromeOptions()
        options.add_argument(f"--load-extension={extension_path}")
        options.add_argument("--disable-gpu")
        options.add_argument("--no-sandbox")

        # Cập nhật trình điều khiển bằng các tùy chọn mới
        self.driver.quit()  # Đóng bất kỳ phiên bản trình điều khiển hiện có nào
        self.driver = self.get_new_driver(browser_name="chrome", options=options)

    def test_scrape_quotes(self):
        # Điều hướng đến trang web mục tiêu với reCAPTCHA
        self.open("https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php")

        # Kiểm tra xem CAPTCHA có mặt và giải quyết nếu cần
        if self.is_element_visible("iframe[src*='recaptcha']"):
            # Phần mở rộng CapSolver sẽ tự động xử lý CAPTCHA
            print("CAPTCHA detected, waiting for CapSolver extension to solve it...")

            # Chờ đợi CAPTCHA được giải quyết
            self.sleep(10)  # Điều chỉnh thời gian dựa trên thời gian giải quyết trung bình

        # Tiến hành các hành động scraping sau khi CAPTCHA được giải quyết
        # Hành động ví dụ: nhấp vào nút hoặc trích xuất văn bản
        self.assert_text("reCAPTCHA demo", "h1")  # Xác nhận nội dung trang

    def tearDown(self):
        # Dọn dẹp và đóng trình duyệt sau khi kiểm tra
        self.driver.quit()
        super().tearDown()

if __name__ == "__main__":
    QuotesScraper().main()

Giải thích:

  • Phương thức setUp:

    • Chúng ta ghi đè phương thức setUp để cấu hình trình duyệt Chrome với phần mở rộng CapSolver trước mỗi kiểm tra.
    • Chúng ta chỉ định đường dẫn đến phần mở rộng CapSolver và thêm nó vào các tùy chọn Chrome.
    • Chúng ta đóng trình điều khiển hiện có và tạo một trình điều khiển mới với các tùy chọn đã cập nhật.
  • Phương thức test_scrape_quotes:

    • Chúng ta điều hướng đến trang web mục tiêu.
    • Phần mở rộng CapSolver sẽ tự động phát hiện và giải quyết bất kỳ CAPTCHA nào.
    • Chúng ta thực hiện các tác vụ scraping như bình thường.
  • Phương thức tearDown:

    • Chúng ta đảm bảo rằng trình duyệt được đóng sau khi kiểm tra để giải phóng tài nguyên.

Chạy script:

bash Copy
python scrape_quotes_with_capsolver.py

Lưu ý: Mặc dù quotes.toscrape.com không có CAPTCHA, nhưng việc tích hợp CapSolver sẽ chuẩn bị cho bộ scraping của bạn cho các trang có CAPTCHA.

Mã bổ sung

Nhận Mã bổ sung của bạn cho các giải pháp captcha hàng đầu tại CapSolver: scrape. Sau khi đổi mã, bạn sẽ nhận được thêm 5% tiền thưởng sau mỗi lần nạp tiền, không giới hạn lần.

Kết luận

Trong hướng dẫn này, chúng ta đã khám phá cách thực hiện web scraping bằng SeleniumBase, bao gồm các kỹ thuật scraping cơ bản và các ví dụ nâng cao hơn như xử lý phân trang, nội dung động và gửi biểu mẫu. Chúng ta cũng đã chứng minh cách tích hợp CapSolver vào các script SeleniumBase của bạn để tự động giải quyết CAPTCHA, đảm bảo các phiên scraping không bị gián đoạn.

Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.

Thêm

Lỗi Cloudflare 1006, 1007, 1008
Lỗi Cloudflare 1006, 1007, 1008 - Giải pháp khắc phục | Cách sửa lỗi

Đang vật lộn với lỗi Cloudflare 1006, 1007 hoặc 1008? Tìm hiểu các giải pháp thực tế để giải quyết các lần từ chối truy cập này và nâng cao trải nghiệm quét web của bạn.

Cloudflare
Logo of CapSolver

Rajinder Singh

05-Dec-2025

AI-LLM: Giải pháp tương lai cho kiểm soát rủi ro nhận dạng hình ảnh và giải mã CAPTCHA
AI-LLM: Giải pháp tương lai cho Kiểm soát Rủi ro Nhận dạng Hình ảnh và Giải quyết CAPTCHA

Một khám phá sâu về cách các mô hình ngôn ngữ lớn (LLMs) đổi mới giải CAPTCHA đồ họa, kết hợp suy luận zero-shot với độ chính xác của mạng nơ-ron convolutional (CNN) cho kiểm soát rủi ro hiện đại.

Logo of CapSolver

Anh Tuan

05-Dec-2025

Cách giải Captchas khi web scraping với Scrapling và CapSolver
Cách giải Captchas khi quét web bằng Scrapling và CapSolver

Scrapling + CapSolver cho phép quét trang web tự động với việc vượt qua ReCaptcha v2/v3 và Cloudflare Turnstile.

web scraping
Logo of CapSolver

Anh Tuan

05-Dec-2025

Thay đổi User-Agent trong Selenium
Thay đổi User-Agent trong Selenium | Các bước và Nguyên tắc tốt

Thay đổi User Agent trong Selenium là bước quan trọng trong nhiều nhiệm vụ quét web. Giúp che giấu script tự động hóa thành một trình duyệt thông thường...

The other captcha
Logo of CapSolver

Lucas Mitchell

05-Dec-2025

Làm thế nào để xác định nếu `action` được yêu cầu để giải quyết Cloudflare Turnstile bằng cách sử dụng tiện ích mở rộng CapSolver
Làm thế nào để xác định xem `action` có cần thiết hay không để giải Cloudflare Turnstile bằng cách sử dụng tiện ích mở rộng CapSolver

Học cách nhận diện hành động để giải CAPTCHA hiệu quả cho Cloudflare Turnstile. Theo dõi hướng dẫn từng bước của chúng tôi về cách sử dụng các công cụ và kỹ thuật của Capsolver.

Cloudflare
Logo of CapSolver

Aloísio Vítor

05-Dec-2025

9trung gian
Khám phá sức mạnh của 9Proxy: Bài đánh giá toàn diện

Trong bài viết này, chúng tôi sẽ giới thiệu 9proxy và các dịch vụ mà họ cung cấp.

Partners
Logo of CapSolver

Nikolai Smirnov

04-Dec-2025