Đăng nhập vào các trang web bằng Python

Logging Into Websites With Python



Tính năng đăng nhập là một chức năng quan trọng trong các ứng dụng web ngày nay. Tính năng này giúp giữ nội dung đặc biệt khỏi những người không phải là người dùng của trang web và cũng được sử dụng để xác định người dùng cao cấp. Vì vậy, nếu bạn có ý định tìm kiếm một trang web, bạn có thể bắt gặp tính năng đăng nhập nếu nội dung chỉ có sẵn cho người dùng đã đăng ký.

Trước đây, các hướng dẫn về cạo trên web đã được đề cập đến, do đó, hướng dẫn này chỉ đề cập đến khía cạnh đạt được quyền 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 script để đăng nhập vào các trang web, bạn sẽ cần 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.



Điều này sẽ được thực hiện với các thư viện Python Request và BeautifulSoup. Bên cạnh 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 sẽ rất quan trọng cho việc phân tích ban đầu trước khi viết mã.



Thư viện Request và BeautifulSoup có thể được cài đặt bằng lệnh pip từ terminal như hình dưới đây:





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

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

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



nhập khẩuyêu cầu
từbs4nhập khẩuBeautifulSoup

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 web hoạt động. Hãy xem xét ngắn gọn cách thức hoạt động của web.

Các trang web được làm bằng 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 với, trong khi phía máy chủ là phần của trang web nơi logic nghiệp vụ và các hoạt động khác của máy chủ 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 đưa ra yêu cầu từ 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 đ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, 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 ĐĂNG.

Việc hiểu rõ 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 Trích dẫn để Scrape trang mạng.

Đă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, bất cứ điều gì sẽ xảy ra. Do đó, chúng tôi sẽ sử dụng quản trị viên là 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 một cái nhìn 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 thực hiện việc 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 nguyên tố . Khi kiểm tra yếu tố, bạn sẽ thấy đầu vào thẻ và sau đó là một phụ huynh mẫu đơn gắn thẻ ở đâu đó phía trên nó. Điều này cho thấy rằng thông tin đăng nhập về cơ bản là các hình thức BÀI ĐĂNG ed vào phía máy chủ của trang web.

Bây giờ, lưu ý Tên thuộc tính của các thẻ đầu vào cho các 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, Tên thuộc tính cho tên người dùng và mật khẩu là tên tài khoảnmật khẩu mở khóa tương ứng.

Tiếp theo, chúng ta phải biết liệu có các thông số khác quan trọng cho việc đă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 cho các trang web, các mã thông báo thường được tạo ra để ngăn chặn các cuộc tấn công Cross Site Forgery.

Do đó, nếu những mã thông báo đó không được thêm vào yêu cầu ĐĂNG 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 ở 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 để ý các yêu cầu POST được gửi đến khi chúng tôi thử đăng nhập.

Đây là những gì chúng tôi sẽ làm tiếp theo 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 sẽ thấy phải là yêu cầu ĐĂNG.

Nhấp vào yêu cầu ĐĂNG và xem các thông số biểu mẫu. Bạn sẽ nhận thấy trang web có một csrf_token tham số với một giá trị. Giá trị đó là một giá trị động, do đó, chúng tôi sẽ cần nắm bắt các giá trị đó bằng cách sử dụng HIỂU ĐƯỢC yêu cầu đầu tiên trước khi sử dụng BÀI ĐĂNG lời yêu cầu.

Đố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 thông 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 Request và BeautifulSoup để truy cập vào nội dung trang của trang đăng nhập.

từyêu cầunhập khẩuPhiên họp
từbs4nhập khẩuBeautifulSoupnhưbs

vớiPhiên họp() nhưNS:
Địa điểm =NS.hiểu được('http://quotes.toscrape.com/login')
in(Địa điểm.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 rằng chúng tôi vẫn chưa đăng nhập.

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

từyêu cầunhập khẩuPhiên họp
từbs4nhập khẩuBeautifulSoupnhưbs

vớiPhiên họp() nhưNS:
Địa điểm =NS.hiểu được('http://quotes.toscrape.com/login')
bs_content=bs(Địa điểm.Nội dung, 'html.parser')
mã thông báo =bs_content.tìm thấy('đầu vào', {'Tên':'csrf_token'})['giá trị']
Dữ liệu đăng nhập= {'tên tài khoản':'quản trị viên','mật khẩu mở khóa':'12345', 'csrf_token':mã thông báo}
NS.bài đăng('http://quotes.toscrape.com/login',Dữ liệu đăng nhập)
home_page=NS.hiểu được('http://quotes.toscrape.com')
in(trang chủ.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 từng dòng mã.

từyêu cầunhập khẩuPhiên họp
từbs4nhập khẩuBeautifulSoupnhưbs

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

vớiPhiên họp() nhưNS:

Phiên yêu cầu được sử dụng khi bạn định giữ ngữ cảnh của một 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(Địa điểm.Nội dung, 'html.parser')
mã thông báo =bs_content.tìm thấy('đầu vào', {'Tên':'csrf_token'})['giá trị']

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

Dữ liệu đăng nhập= {'tên tài khoản':'quản trị viên','mật khẩu mở khóa':'12345', 'csrf_token':mã thông báo}
NS.bài đăng('http://quotes.toscrape.com/login',Dữ liệu đăng nhập)

Mã ở đây tạo ra 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à Tên thuộc tính của các thẻ đầu vào và các giá trị là giá trị thuộc tính của các thẻ đầu vào.

Các bài đăng được sử dụng để gửi một yêu cầu bài đăng với các tham số và đăng nhập cho chúng tôi.

home_page=NS.hiểu được('http://quotes.toscrape.com')
in(trang chủ.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 để hiển thị rằng đăng nhập đã thành công.

Phần 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, do đó một số trang web sẽ khó đăng nhập hơn những trang khác. Bạn có thể làm được nhiều hơn thế để vượt qua bất kỳ thử thách đăng nhập nào 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 của công cụ Nhà phát triển trên trình duyệt web của bạn.