CodeGym /Khóa học Java /Python SELF VI /Tự động cuộn trang và nhấp vào liên kết

Tự động cuộn trang và nhấp vào liên kết

Python SELF VI
Mức độ , Bài học
Có sẵn

1. Tự động cuộn trang

Hãy tưởng tượng bạn đang lướt qua một feed mạng xã hội chán ngắt nhưng quen thuộc, nơi nội dung chỉ tải dần khi bạn cuộn. Thật ra, cuộn trang kiểu "ma thuật" này có một API để tự động hóa qua Selenium.

Phương pháp execute_script()

Phương pháp execute_script() trong Selenium cho phép bạn chạy mã JavaScript trên trang web, và đây là một công cụ mạnh mẽ khi nói đến việc cuộn trang. Hãy cùng xem cách sử dụng nó để cuộn trang.

Python

from selenium import webdriver
import time

# Khởi tạo driver trình duyệt
driver = webdriver.Chrome()

# Mở trang đích
driver.get('https://example.com/scrolling_page')

# Cuộn trang xuống
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)  # Đợi để nội dung tải đầy đủ

# Cuộn trang lên (đổi gió chút)
driver.execute_script("window.scrollTo(document.body.scrollHeight, 0);")

# Kết thúc phiên làm việc
driver.quit()

Trong đoạn script này, chúng ta sử dụng window.scrollTo() để cuộn trang. Các tham số (0, document.body.scrollHeight) chỉ định cuộn từ đầu đến cuối trang. Đây là một kỹ thuật đơn giản và hiệu quả để đảm bảo tải hoàn chỉnh tất cả các phần tử động.

Tại sao điều này quan trọng?

Sử dụng execute_script() để cuộn trang giúp tải các nội dung có thể bị ẩn ban đầu, ví dụ như trong cuộn vô tận. Điều này đặc biệt hữu ích với mạng xã hội và feed tin tức, nơi nội dung tải động.

2. Nhấp vào liên kết

Bây giờ khi bạn đã quen với cuộn trang, đến lúc chuyển sang nhiệm vụ tiếp theo - tự động nhấp vào liên kết. Đây là kỹ năng quan trọng khi thu thập dữ liệu, đặc biệt là khi thông tin được phân tán trên nhiều trang.

Cơ bản về điều hướng liên kết

Để click vào một liên kết, chúng ta có thể sử dụng phương pháp click() trên một phần tử đã chọn. Hãy xem một ví dụ đơn giản:

Python

from selenium import webdriver

# Khởi tạo driver trình duyệt
driver = webdriver.Chrome()

# Mở trang đích
driver.get('https://example.com/links_page')

# Tìm liên kết bằng văn bản và click
link = driver.find_element_by_link_text('Next Page')
link.click()

# Kết thúc phiên làm việc
driver.quit()

Trong ví dụ này, chúng ta tìm liên kết bằng nội dung văn bản của nó. Nhưng nếu văn bản không duy nhất thì sao? Trong trường hợp đó, có thể sử dụng các phương pháp chính xác hơn như find_element_by_xpath() hoặc find_element_by_css_selector().

Python

# Tìm liên kết bằng XPath
link = driver.find_element_by_xpath('//a[@href="/next_page"]')
link.click()

Lợi ích của việc tự động nhấp vào liên kết

Điều hướng liên kết với Selenium cho phép tự động hóa quá trình thu thập dữ liệu từ các trang có phân trang, hoặc khi dữ liệu được phân bố trên nhiều phần khác nhau của trang web. Điều này rất phù hợp cho việc duyệt kết quả tìm kiếm hoặc danh mục sản phẩm trên các trang thương mại điện tử.

3. Kết hợp cuộn trang và điều hướng

Bây giờ hãy tưởng tượng bạn cần cuộn trang để tìm một liên kết hoặc phần tử cụ thể, rồi sau đó chuyển sang trang khác. Đây là một quy trình kết hợp có thể được tự động hóa.

Ví dụ script kết hợp

Python

from selenium import webdriver
import time

# Khởi tạo driver trình duyệt
driver = webdriver.Chrome()

# Mở trang đích
driver.get('https://example.com/scroll_and_click')

# Cuộn trang để tải các phần tử ẩn
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)

# Tìm và nhấp vào liên kết cần thiết
link = driver.find_element_by_xpath('//a[text()="Load More"]')
link.click()

# Kết thúc phiên làm việc
driver.quit()

Điều gì có thể xảy ra?

Khi làm việc với các trang web động, đôi khi các phần tử có thể không kịp tải hoặc không tải đầy đủ. Trong những trường hợp này, cần sử dụng các phương pháp chờ để đảm bảo các phần tử mà bạn muốn tương tác đã sẵn sàng.

Python

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

# Chờ cho đến khi phần tử có thể được nhấp
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//a[text()="Load More"]'))
)
element.click()

Sử dụng các phương pháp chờ giúp tránh lỗi do các phần tử chưa sẵn sàng và đảm bảo script hoạt động ổn định hơn.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION