Cạo trang web với đăng nhập python selen

Các trang web cạo trong python có thể giúp bạn tiết kiệm rất nhiều thời gian và có thể khá đơn giản khi cấu trúc trang nhất quán. Tuy nhiên, bạn sẽ làm gì khi thông tin bạn cần cạo nằm sau đường dẫn đăng nhập nơi bạn cần nhập tên người dùng và mật khẩu trước?

Bài viết này sử dụng selen để thực hiện quét web. Nó chậm hơn một chút so với việc sử dụng mô-đun request hoặc urllib, tuy nhiên có một lợi thế lớn đó là Selenium sử dụng một trình duyệt thực. Vì vậy, nếu máy chủ trang web đang kiểm tra xem yêu cầu web có đến từ người thật hay không, thì sẽ ít có khả năng nó bị từ chối nếu bạn sử dụng Selenium. Ví dụ: nếu bạn sử dụng mô-đun yêu cầu, các tiêu đề bình thường được bao gồm khi người dùng thực sử dụng trình duyệt [e. g. phiên bản trình duyệt, ngôn ngữ, v.v.] sẽ không có ở đó

Các nguyên tắc cơ bản về quét web với python

Bạn có thể đọc về các nguyên tắc cơ bản của việc quét web từ bài viết 'dò web bằng Selenium' của chúng tôi. Tại sao selen? . Điều này giúp giảm thiểu và chặn kiểm tra rô-bốt

Một ví dụ đơn giản về quét web để bắt đầu với

Hãy bắt đầu với một ví dụ thu thập nhanh để thu thập danh sách các tiêu đề blog từ trang web của chính chúng ta. PythonHowToChương trình

Để sử dụng selen [xem hướng dẫn đầy đủ về selen trong python tại đây], bạn cần mô phỏng trình duyệt. Để mô phỏng trình duyệt, bạn cần cài đặt trình điều khiển trình duyệt

Nhắc nhanh… Cần có trình điều khiển web, nếu bạn đã nhớ nơi lưu trữ, nếu bạn chưa có, hãy tải xuống dựa trên bảng sau

Trình duyệtHệ điều hành được hỗ trợĐược duy trì bởi Trình theo dõi sự cố tải xuốngChromium/ChromeWindows/macOS/LinuxGoogleCác sự cố tải xuốngFirefoxWindows/macOS/LinuxMozillaTải xuốngcác sự cốEdgeWindows 10MicrosoftDownloadsCác sự cốInternet ExplorerWindowsSelenium ProjectCác sự cố Tải xuốngcác sự cốSafarimacOS El Capitan và mới hơnAppleCác sự cố tích hợp sẵnOperaWindows/macOS/LinuxOperaCác sự cố tải xuống

Hãy bắt đầu tạo một tệp main.py sẽ chứa tất cả mã cần thiết để liệt kê các tiêu đề của blog python

Khi bạn đã lưu trình điều khiển web trên máy tính của mình, bạn đã sẵn sàng viết mã. Như một bản tóm tắt nhanh về cách thực hiện quét web đơn giản, đoạn mã sau sẽ liệt kê một số tiêu đề blog từ pythonhowtoprogram. com

# main.py
from selenium import webdriver

# Web driver path
WEBDRIVER_PATH = './'

# Web driver declaration
driver = webdriver.Firefox[WEBDRIVER_PATH]
# Website to scrap
URL = '//pythonhowtoprogram.com/'
# Web driver going into website
driver.get[URL]
# Getting all alrticules into an array
articles = driver.find_elements_by_css_selector['article.article-card']
# Navagating into articules
for article in articles:
    # Getting each articule header
    header = article.find_element_by_css_selector['header']
    # Getting articule title
    title = header.find_element_by_css_selector['a']
    # Printing each articule title
    print[title.text]
# close the webdriver
driver.quit[]

Đoạn mã trên sẽ trả về một danh sách các tiêu đề blog từ pythonhowtoprogram. com. Trong trường hợp cụ thể này, trình duyệt web trước tiên sẽ mở một cửa sổ và điều hướng đến trang web. Tiếp theo, trang web chứa phần các bài đăng gần đây chứa danh sách tiêu đề, mã lưu trữ phần này thành một mảng và đi đến từng blog thu thập tiêu đề và in nội dung của nó trên thiết bị đầu cuối. Kết quả sẽ tương tự như các hình ảnh sau

Bài đăng gần đây [Trình điều khiển web]

Danh sách bài đăng [Terminal]

Sau khi bạn biết cách thực hiện một số thao tác quét web cơ bản, bạn đã sẵn sàng thử các trang web có thông tin đăng nhập

Đăng nhập vào một trang web

Giả sử bạn muốn biết bạn đã chơi bao nhiêu ván cờ vua và chi tiết về số ván thua và thắng trên tài khoản của bạn tại www. cờ vua. com. Để đạt được điều này, bạn có thể tạo một tệp có tên mychess.py sẽ chứa mã sau

# mychess.py
from selenium import webdriver

# Web driver path
WEBDRIVER_PATH = './'
# Web driver declaration
driver = webdriver.Firefox[WEBDRIVER_PATH]

# Create a payload with the credentials
payload = {'username':'[YOUR_USERNAME]', 
           'password':'[YOUR_PASSWORD]'
          }
          
# Website with login
URL = '//www.chess.com/login'
# Web driver going into website
driver.get[URL]
# Create a variable so you are able to check if login was successful
login_title = driver.title

# Sending credentials 
driver.find_element_by_id['username'].send_keys[payload['username']]
driver.find_element_by_id['password'].send_keys[payload['password']]
driver.find_element_by_id['login'].click[]

#Check login
if login_title == driver.title:
    print["Login failed"]

Có thể thấy, bước đầu tiên là vào trang đăng nhập. Tiếp theo, các trường tên người dùng và mật khẩu được định vị bằng chức năng “find_element_by_id[]”. Khi bạn đến đây, bạn có thể kiểm tra xem đăng nhập đã được thực hiện thành công hay chưa với tiêu đề. Nếu tiêu đề [từ trình điều khiển trường. title] đã thay đổi sau khi thử đăng nhập thì đăng nhập thành công

Lỗi đăng nhập [Trình điều khiển web]

Lỗi đăng nhập [Terminal]

Nếu bạn gặp lỗi này, điều đó có nghĩa là thông tin đăng nhập được sử dụng không chính xác, vì vậy bạn có thể thử lại hoặc thậm chí đóng ứng dụng. Trong trường hợp này, nếu đăng nhập không thành công, mã sẽ chuyển thẳng đến driver.close[] và kết thúc quá trình thực thi ứng dụng

Mặt khác, nếu quá trình đăng nhập được thực hiện mà không có bất kỳ lỗi nào thì tiêu đề đã được thay đổi nghĩa là bạn hiện có thể thu thập dữ liệu mà mình đang tìm kiếm. Vì vậy, điều này sẽ đạt được với đoạn mã sau

# mychess.py
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

# Web driver path
WEBDRIVER_PATH = './'
# Web driver declaration
driver = webdriver.Firefox[WEBDRIVER_PATH]

# Create a payload with the credentials
payload = {'username':'[YOUR_USERNAME]', 
          'password':'[YOUR_PASSWORD]'
         }
          
# Website with login
LOGIN = '//www.chess.com/login'
# Web driver going into website
driver.get[LOGIN]
# create a variable so you are able to check if login was successful
login_title = driver.title
# Sending credentials 
driver.find_element_by_id['username'].send_keys[payload['username']]
driver.find_element_by_id['password'].send_keys[payload['password']]
driver.find_element_by_id['login'].click[]

#Check login
if login_title == driver.title:
    print["Login failed"]
else:
    STATS = f"//www.chess.com/stats/live/rapid/{payload['username']}"
    driver.get[STATS]
    total = WebDriverWait[driver, 10].until[EC.presence_of_element_located[[By.CSS_SELECTOR, "div.game-iconBlock:nth-child[2] > div:nth-child[2]"]]]
    won = WebDriverWait[driver, 10].until[EC.presence_of_element_located[[By.CSS_SELECTOR, "div.tricolor-bar-header:nth-child[1] > span:nth-child[1] > div:nth-child[1]"]]]
    lost = WebDriverWait[driver, 10].until[EC.presence_of_element_located[[By.CSS_SELECTOR, "div.tricolor-bar-header:nth-child[1] > span:nth-child[2] > div:nth-child[1]"]]]
    print['Games: ' + total.text]
    print['Won: ' + won.text]
    print['Lost: ' + lost.text]

#close the webdriver
driver.quit[]

Đăng nhập bằng Selenium

Kết quả

Khi bạn đã đăng nhập bằng thông tin đăng nhập của mình, trình điều khiển web sẽ hiển thị nội dung trang web và bạn có thể tự do điều hướng qua nội dung đó, vì vậy hãy điều hướng và đếm số trận đã chơi cũng như số trận thua và số trận thắng

# mychess.py
from selenium import webdriver
# New imports needed, in order to wait for the content to be ready
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

# Web driver path
WEBDRIVER_PATH = './'
# Web driver declaration
driver = webdriver.Firefox[WEBDRIVER_PATH]

# Create a payload with the credentials
payload = {'username':'[YOUR_USERNAME]', 
           'password':'[YOUR_PASSWORD]'
           }
 
# Website with login
LOGIN = '//www.chess.com/login'
# Web driver going into website
driver.get[LOGIN]

# Sending credentials 
driver.find_element_by_id['username'].send_keys[payload['username']]
driver.find_element_by_id['password'].send_keys[payload['password']]
driver.find_element_by_id['login'].click[]

# Declare the new page
STATS = f"//www.chess.com/stats/live/rapid/{payload['username']}"
# Navigate into the page
driver.get[STATS]
# Search for each element containing the information needed
total = WebDriverWait[driver, 10].until[EC.presence_of_element_located[[By.CSS_SELECTOR, "div.game-iconBlock:nth-child[2] > div:nth-child[2]"]]]
won = WebDriverWait[driver, 10].until[EC.presence_of_element_located[[By.CSS_SELECTOR, "div.tricolor-bar-header:nth-child[1] > span:nth-child[1] > div:nth-child[1]"]]]
lost = WebDriverWait[driver, 10].until[EC.presence_of_element_located[[By.CSS_SELECTOR, "div.tricolor-bar-header:nth-child[1] > span:nth-child[2] > div:nth-child[1]"]]]

# Print all results
print['Games: ' + total.text]
print['Won: ' + won.text]
print['Lost: ' + lost.text]
#close the webdriver
driver.quit[]

Kết quả

Dữ liệu được thu thập sẽ được hiển thị tại thiết bị đầu cuối bảng điều khiển như trong hình trên, nó sẽ thay đổi dựa trên lịch sử của từng tài khoản

Sự kết luận

Sức mạnh của việc quét web bằng selen là vô tận và công cụ tuyệt vời này cung cấp rất nhiều cách để giải quyết mọi tác vụ. Để trích xuất dữ liệu phía sau màn hình đăng nhập, bạn có thể thực hiện các bước trên để mô phỏng quá trình đăng nhập. Khi đăng nhập đã được thực hiện, phiên sẽ hoạt động và bạn có thể tự do chạy trích xuất Selenium bình thường

Một điều cần lưu ý là phương pháp xác minh xem bạn đã đăng nhập hay chưa sẽ khác nhau giữa các trang web. Trong ví dụ này, chúng tôi đã sử dụng tiêu đề cập nhật của tài liệu để đánh giá xem đăng nhập có thành công hay không. Đối với các trang web khác, đó có thể là sự hiện diện của biểu tượng người dùng hoặc thiếu đăng nhập/đăng ký tốt hơn hoặc một loạt các chỉ số khác

Nhận thông báo tự động về bài viết mới

Tham gia Nhóm nội bộ Python và nhận các mẹo MIỄN PHÍ trong hộp thư đến của bạn

Ngoài ra, khi bạn đăng ký, chúng tôi sẽ gửi cho bạn danh sách các lớp lót python one hữu ích nhất sẽ giúp bạn tiết kiệm thời gian, làm cho mã của bạn dễ đọc hơn và bạn có thể sử dụng ngay lập tức trong mã của mình. Theo dõi danh sách email của chúng tôi và nhận danh sách ngay bây giờ

Bạn có thể cạo một trang web yêu cầu đăng nhập không?

Vâng, đó là màn hình đăng nhập . Đôi khi, bạn có thể đặt mục tiêu thu thập dữ liệu mà bạn chỉ có thể truy cập sau khi đăng nhập vào tài khoản. Đó có thể là phân tích kênh, lịch sử người dùng của bạn hoặc bất kỳ loại thông tin nào khác mà bạn cần. Trong trường hợp này, trước tiên hãy kiểm tra xem công ty có cung cấp API cho mục đích.

Bạn có thể quét web bằng Selenium không?

Selenium sử dụng giao thức Webdriver để tự động hóa các quy trình trên nhiều trình duyệt phổ biến khác nhau như Firefox, Chrome và Safari. Việc tự động hóa này có thể được thực hiện cục bộ [đối với các mục đích như thử nghiệm một trang web] hoặc từ xa [đối với các mục đích như quét web] .

Bạn có thể sử dụng Python để cạo một trang web không?

Thay vì xem trang web việc làm mỗi ngày, bạn có thể sử dụng Python để giúp tự động hóa các phần lặp đi lặp lại trong tìm kiếm việc làm của mình . Quét web tự động có thể là một giải pháp để tăng tốc quá trình thu thập dữ liệu. Bạn viết mã của mình một lần và nó sẽ nhận được thông tin bạn muốn nhiều lần và từ nhiều trang.

Selenium WebDriver xác minh đăng nhập thành công như thế nào?

Bây giờ, chúng ta hãy xem xét chi tiết các bước đó để giúp chúng ta thực hiện kiểm thử tự động hóa bằng Selenium để đăng nhập bằng Java. .
Tạo một phiên bản Selenium WebDriver. .
Định cấu hình trình duyệt của bạn nếu cần. .
Điều hướng đến URL được yêu cầu. .
Định vị phần tử HTML. .
Thực hiện hành động trên phần tử HTML được định vị. .
Xác minh và Xác thực Hành động

Chủ Đề