Làm thế nào để bạn sử dụng đăng nhập trong python?

Ví dụ: chúng tôi sẽ đăng nhập vào trang web demo này và chụp ảnh màn hình trang tài khoản. Vì vậy, hãy đảm bảo tạo một tài khoản ở đó trước khi bạn bắt đầu

1. Đăng nhập bằng js_scenario

Đây là giải pháp đơn giản nhất trong số ba giải pháp vì nó bắt chước hành vi của người dùng bình thường. Trước tiên, chúng tôi truy cập trang đăng nhập, nhập thông tin đăng nhập của bạn và nhấp vào nút đăng nhập

Mã bên dưới sẽ làm điều đó cho trang web mẫu của chúng tôi và sẽ chụp ảnh màn hình của trang tài khoản

from scrapingbee import ScrapingBeeClient

MAIN_URL = "//automationpractice.com/index.php?controller=authentication"

client = ScrapingBeeClient[api_key='YOUR-API-KEY']
response = client.get[
    MAIN_URL,
    params= {
        "js_scenario": {"instructions":[
            {"fill": ["#email", "your-registration-email@website.com"]}, # Enter registration email
            {"fill": ["#passwd", "your-password"]}, # Enter password
            {"click": "#SubmitLogin"}, # Click on login
            {"wait": 1000} # Wait for a second
        ]},
        "screenshot_full_page": True # Take a screenshot
    }
]
if response.ok:
    with open["./screenshot.png", "wb"] as f:
        f.write[response.content]
else:
    print[response.content]

Và kết quả là đăng nhập thành công như các bạn thấy

2. Đăng nhập bằng yêu cầu POST

Với phương pháp này, chúng tôi sẽ gửi một yêu cầu POST trực tiếp tới form action URL

Trước tiên, chúng ta cần xem những trường nào đang được gửi khi chúng ta đăng nhập. Chúng tôi có thể làm điều đó một cách dễ dàng thông qua các công cụ dành cho nhà phát triển Chrome.  

Như bạn có thể thấy, các trường chúng ta cần điền là. email và passwd

Mã bên dưới sẽ gửi yêu cầu POST tới trang web của chúng tôi, gửi dữ liệu của chúng tôi cùng với yêu cầu đó

from scrapingbee import ScrapingBeeClient

MAIN_URL = "//automationpractice.com/index.php?controller=authentication"

client = ScrapingBeeClient[api_key='YOUR-API-KEY']
response = client.post[ # Using a POST request instead of GET
    MAIN_URL,
    data= { # Data to send with our POST request
        "email": "your-registration-email@website.com", # Login email
        "passwd": "your-password" # Login password
    }
]

if response.ok:
    with open["./account.html", "wb"] as f:
        f.write[response.content]
else:
    print[response.content]

3. Sử dụng cookie để đăng nhập

Đăng nhập vào trang web demo của chúng tôi và mở công cụ dành cho nhà phát triển Chrome, đi tới Ứng dụng → Cookie và bạn sẽ nhận thấy rằng một cookie có tên PrestaShop-a30a9934ef476d11b6cc3c983616e364 với giá trị băm lớn được lưu và đang được sử dụng trên miền đó. Cookie đó lưu trữ tất cả thông tin về người dùng, thông tin đăng nhập, trạng thái người dùng, v.v…

Bây giờ chúng tôi có cookie đó, chúng tôi có thể sao chép nội dung của cookie và gửi trực tiếp cùng với yêu cầu đến khu vực Tài khoản của tôi mà không phải gửi bất kỳ thông tin xác thực nào

Trong trường hợp hiện tại này, mọi trang web đều sử dụng xác thực và chúng tôi phải đăng nhập bằng cách nhập thông tin đăng nhập phù hợp. Nhưng đôi khi việc đăng nhập lại vào một trang web cụ thể trở nên rất bận rộn. Vì vậy, để giải quyết vấn đề này, chúng ta hãy xây dựng bot đăng nhập tự động của riêng mình bằng python

Chúng tôi sẽ sử dụng Selenium [thư viện python] để tạo bot đăng nhập tự động. Thư viện Selenium của Python giúp chúng ta truy cập tất cả các chức năng của Selenium WebDriver như Firefox, Chrome, Remote, v.v.

Cài đặt

Trước hết, chúng ta phải cài đặt selen bằng lệnh bên dưới

pip install selenium

Sau khi cài đặt Selenium thành công, chúng ta cũng phải cài đặt Chromedriver để truy cập Chrome webdriver của Selenium. Bạn có thể tải xuống tương tự từ đây [Tải xuống phiên bản theo phiên bản chrome hệ thống của bạn và theo hệ điều hành của bạn]

Đảm bảo rằng bạn đã lưu ý vị trí tải xuống chromedriver [vì nó được sử dụng trong tập lệnh python của chúng tôi]. Bây giờ Sau khi tải xuống, giải nén tệp zip và vui lòng lưu ý vị trí tệp của tệp được giải nén vì chúng tôi cần nó sau này trong mã python. [Bạn có thể tìm vị trí bằng cách nhấp vào thuộc tính và sau đó nhấp vào chi tiết]

Các hướng dẫn quét web đã được đề cập trước đây, do đó, hướng dẫn này chỉ đề cập đến khía cạnh truy cập vào các trang web bằng cách đăng nhập bằng mã thay vì thực hiện thủ công bằng cách sử dụng trình duyệt

Để hiểu hướng dẫn này và có thể viết các kịch bản để đăng nhập vào các trang web, bạn cần có một số hiểu biết về HTML. Có thể không đủ để xây dựng các trang web tuyệt vời, nhưng đủ để hiểu cấu trúc của một trang web cơ bản

Cài đặt

Điều này sẽ được thực hiện với các thư viện Requests và BeautifulSoup Python. Ngoài các thư viện Python đó, bạn sẽ cần một trình duyệt tốt như Google Chrome hoặc Mozilla Firefox vì chúng rất quan trọng để phân tích ban đầu trước khi viết mã

Các thư viện Yêu cầu và BeautifulSoup có thể được cài đặt bằng lệnh pip từ thiết bị đầu cuối như bên dưới

yêu cầu cài đặt pip
pip cài đặt BeautifulSoup4

Để xác nhận sự thành công của quá trình cài đặt, hãy kích hoạt trình bao tương tác của Python, thao tác này được thực hiện bằng cách nhập python vào thiết bị đầu cuối

Sau đó nhập cả hai thư viện

nhập yêu cầu
từ bs4 nhập BeautifulSoup

Quá trình nhập thành công nếu không có lỗi

Quá trình

Đăng nhập vào một trang web bằng tập lệnh yêu cầu kiến ​​thức về HTML và ý tưởng về cách thức hoạt động của trang web. Hãy xem xét ngắn gọn cách thức hoạt động của web

Các trang web được tạo thành từ hai phần chính, phía máy khách và phía máy chủ. Phía máy khách là một phần của trang web mà người dùng tương tác, trong khi phía máy chủ là một phần của trang web nơi logic nghiệp vụ và các hoạt động máy chủ khác như truy cập cơ sở dữ liệu được thực thi

Khi bạn thử mở một trang web thông qua liên kết của nó, bạn đang yêu cầu phía máy chủ tìm nạp cho bạn các tệp HTML và các tệp tĩnh khác như CSS và JavaScript. Yêu cầu này được gọi là yêu cầu GET. Tuy nhiên, khi bạn đang điền vào biểu mẫu, tải lên tệp phương tiện hoặc tài liệu, tạo bài đăng và nhấp vào nút gửi, giả sử bạn đang gửi thông tin đến phía máy chủ. Yêu cầu này được gọi là yêu cầu POST

Việc hiểu hai khái niệm đó sẽ rất quan trọng khi viết kịch bản của chúng tôi

Kiểm tra trang web

Để thực hành các khái niệm của bài viết này, chúng tôi sẽ sử dụng trang web Quotes To Scrape

Đăng nhập vào các trang web yêu cầu thông tin như tên người dùng và mật khẩu

Tuy nhiên, vì trang web này chỉ được sử dụng như một bằng chứng về khái niệm, mọi thứ đều ổn. Do đó, chúng tôi sẽ sử dụng quản trị viên làm tên người dùng và 12345 làm mật khẩu

Đầu tiên, điều quan trọng là phải xem nguồn trang vì điều này sẽ cung cấp tổng quan về cấu trúc của trang web. Điều này có thể được thực hiện bằng cách nhấp chuột phải vào trang web và nhấp vào “Xem nguồn trang”. Tiếp theo, bạn kiểm tra biểu mẫu đăng nhập. Bạn làm điều này bằng cách nhấp chuột phải vào một trong các hộp đăng nhập và nhấp vào kiểm tra phần tử. Khi kiểm tra phần tử, bạn sẽ thấy các thẻ đầu vào và sau đó là thẻ biểu mẫu gốc ở đâu đó phía trên nó. Điều này cho thấy rằng các thông tin đăng nhập về cơ bản là các biểu mẫu được đăng lên phía máy chủ của trang web

Bây giờ, lưu ý thuộc tính tên của các thẻ đầu vào cho hộp tên người dùng và mật khẩu, chúng sẽ cần thiết khi viết mã. Đối với trang web này, thuộc tính tên cho tên người dùng và mật khẩu lần lượt là tên người dùng và mật khẩu

Tiếp theo, chúng ta phải biết liệu có các tham số khác quan trọng để đăng nhập hay không. Hãy nhanh chóng giải thích điều này. Để tăng tính bảo mật của các trang web, mã thông báo thường được tạo để ngăn chặn các cuộc tấn công giả mạo trang web chéo

Do đó, nếu những mã thông báo đó không được thêm vào yêu cầu POST thì đăng nhập sẽ không thành công. Vì vậy, làm thế nào để chúng ta biết về các thông số như vậy?

Chúng tôi sẽ cần sử dụng tab Mạng. Để có được tab này trên Google Chrome hoặc Mozilla Firefox, hãy mở Công cụ dành cho nhà phát triển và nhấp vào tab Mạng

Khi bạn đang ở trong tab mạng, hãy thử làm mới trang hiện tại và bạn sẽ nhận thấy các yêu cầu đến. Bạn nên cố gắng coi chừng các yêu cầu POST được gửi khi chúng tôi thử đăng nhập

Đây là những gì chúng tôi sẽ làm tiếp theo, trong khi mở tab Mạng. Nhập chi tiết đăng nhập và thử đăng nhập, yêu cầu đầu tiên bạn thấy phải là yêu cầu POST

 

Nhấp vào yêu cầu POST và xem các tham số biểu mẫu. Bạn sẽ nhận thấy trang web có tham số csrf_token có giá trị. Giá trị đó là một giá trị động, do đó, chúng tôi cần nắm bắt các giá trị đó bằng cách sử dụng yêu cầu GET trước khi sử dụng yêu cầu POST

Đối với các trang web khác mà bạn sẽ làm việc, có thể bạn không thấy csrf_token nhưng có thể có các mã thông báo khác được tạo động. Theo thời gian, bạn sẽ hiểu rõ hơn về các tham số thực sự quan trọng khi thực hiện đăng nhập

Mật mã

Đầu tiên, chúng ta cần sử dụng Requests và BeautifulSoup để truy cập vào nội dung trang của trang đăng nhập

từ nhập phiên
từ bs4 import BeautifulSoup as bs
 
with Session[] as s:
      trang web = s. lấy["http. //dấu ngoặc kép. để cạo. com/login"]
      in[site.nội dung]

 

Điều này sẽ in ra nội dung của trang đăng nhập trước khi chúng tôi đăng nhập và nếu bạn tìm kiếm từ khóa “Đăng nhập”. Từ khóa sẽ được tìm thấy trong nội dung trang cho thấy chúng tôi chưa đăng nhập

Tiếp theo, chúng tôi sẽ tìm kiếm từ khóa csrf_token được tìm thấy như một trong các tham số khi sử dụng tab mạng trước đó. Nếu từ khóa hiển thị khớp với thẻ đầu vào, thì giá trị có thể được trích xuất mỗi khi bạn chạy tập lệnh bằng BeautifulSoup

từ nhập phiên
từ bs4 import BeautifulSoup as bs
 
with Session[] as s:
      trang web = s. lấy["http. //dấu ngoặc kép. để cạo. com/login"]
    bs_content = bs [site.nội dung, "html. trình phân tích cú pháp"]
    mã thông báo = . tìm["đầu vào", {"name":"csrf_token"}]["value"]
    login_data = {"username":"quản trị","mật khẩu" . "12345", "csrf_token" . mã thông báo}
    s. đăng["http. //dấu ngoặc kép. để cạo. com/login", login_data ]
    home_page = s.lấy["http. //dấu ngoặc kép. để cạo. com"]
    in[ . nội dung]

Thao tác này sẽ in nội dung của trang sau khi đăng nhập và nếu bạn tìm kiếm từ khóa “Đăng xuất”. Từ khóa sẽ được tìm thấy trong nội dung trang cho thấy rằng chúng tôi đã có thể đăng nhập thành công

Hãy xem xét từng dòng mã

từ nhập phiên
từ bs4 import BeautifulSoup as bs

Các dòng mã trên được sử dụng để nhập đối tượng Phiên từ thư viện yêu cầu và đối tượng BeautifulSoup từ thư viện bs4 bằng bí danh bs

với Phiên [] như s:

Phiên yêu cầu được sử dụng khi bạn có ý định giữ ngữ cảnh của yêu cầu, do đó, cookie và tất cả thông tin của phiên yêu cầu đó có thể được lưu trữ

bs_content = bs [trang web.nội dung, "html. trình phân tích cú pháp"]
mã thông báo = bs_content. tìm["đầu vào", {"name":"csrf_token"}]["value"]

Mã này ở đây sử dụng thư viện BeautifulSoup để có thể trích xuất csrf_token từ trang web rồi gán cho biến mã thông báo. Bạn có thể tìm hiểu về trích xuất dữ liệu từ các nút bằng BeautifulSoup

login_data = {"tên người dùng" . "quản trị","mật khẩu" . "12345", "csrf_token" . mã thông báo}
s. bài đăng["http. //dấu ngoặc kép. để cạo. com/login", login_data ]

Mã ở đây tạo một từ điển các tham số được sử dụng để đăng nhập. Các khóa của từ điển là thuộc tính tên của các thẻ đầu vào và các giá trị là thuộc tính giá trị của các thẻ đầu vào

Phương thức đăng được sử dụng để gửi yêu cầu đăng với các tham số và đăng nhập cho chúng tôi

home_page = s. lấy["http. //dấu ngoặc kép. để cạo. com"]
in[ home_page. nội dung]

Sau khi đăng nhập, những dòng mã trên chỉ cần trích xuất thông tin từ trang để cho biết rằng đăng nhập đã thành công

Sự kết luận

Quá trình đăng nhập vào các trang web bằng Python khá dễ dàng, tuy nhiên việc thiết lập các trang web không giống nhau nên một số trang sẽ khó đăng nhập hơn các trang khác. Còn nhiều việc có thể làm để vượt qua mọi thử thách đăng nhập mà bạn gặp phải

Điều quan trọng nhất trong tất cả những điều này là kiến ​​thức về HTML, Yêu cầu, BeautifulSoup và khả năng hiểu thông tin nhận được từ tab Mạng trong Công cụ dành cho nhà phát triển của trình duyệt web của bạn

Chủ Đề