Cấp bậc tác giả:

TRAINING

Hướng dẫn tự động đăng nhập facebook với Selenium

Được viết bởi webmaster ngày 15/08/2020 lúc 11:11 AM
Bài này mình sẽ hướng dẫn rất chi tiết từng bước một để bạn có thể hoàn thiện ứng dụng đăng nhập facebook tự động nhé.
  • 0
  • 7339

Hướng dẫn tự động đăng nhập facebook với Selenium

1. Quy trình thực hiện
Dưới đây là từng bước chi tiết mà chúng ta cần làm để có thể xây dựng được ứng dụng tự động đăng nhập facebook với Selenium trên Python.
  1. Mở trình và truy cập vào https://facebook.com
  2. Truy xuất Css selector của các thành phần sau: ô nhập tài khoản, ô nhập mật khẩu, button đăng nhập
  3. Nhập thông tin đăng nhập vào các ô tài khoản và mật khẩu
  4. Nhấp vào button đăng nhập
  5. Kiểm tra đăng nhập thành công hay không.
2. Tự động đăng nhập facebook với Selenium
Một số thư viện chúng ta cần import để đảm bảo code của chúng ta hoạt động:
import argparse
import sys
from random import randint
from time import sleep
 
from selenium import webdriver
 
FB_URL = "https://fb.com"
Dưới đây là sườn của code mà chúng ta sẽ cùng nhau đi xây dựng, chúng ta có class FacebookLogin với:
  • Hàm khởi tạo nhận vào 2 tham số là tài khoản và mật khẩu. Hàm này cũng sẽ khởi tạo 1 trình duyệt và truy cập tới trang chủ của facebook – cũng chính là trang đăng nhập.
  • Hàm đăng nhập thực hiện tìm kiếm và nhập giá trị cho các trường tài khoản, mật khẩu trên website và sau đó nhấp vào button đăng nhập để thực hiện hành động đăng nhập.
  • Hàm kiểm tra đăng nhập để xem xét việc đăng nhập có thành công hay không.
class FacebookLogin:
    def __init__(self, username, password):
        self.username = username
        self.password = password
        self.driver = webdriver.Firefox()
 
    def login(self):
        pass
 
    def verify_login(self):
        pass
Để việc đăng nhập không diễn ra quá nhanh, làm giả lập thì cũng phải giống người làm để tránh bị phát hiện. Chúng ta sẽ xây dựng 1 hàm random thời gian chờ sau mỗi hành động.
def random_sleep(min_s, max_s):
    sleep(randint(min_s, max_s))
2.1 Xây dựng chức năng đăng nhập
Chúng ta sẽ thực hiện đăng nhập theo quy trình sau:
  1. Truy cập vào trang đăng nhập của facebook
  2. Truy xuất css selector của các thẻ input username và password, cả button đăng nhập nữa
  3. Truyền thông tin tài khoản, mật khẩu vào các thẻ input tương ứng
  4. Click vào button đăng nhập.
2.1.1 Cách truy xuất tới một phần tử
Để truy xuất một địa chỉ URL với Selenium, bạn làm như sau:
driver = webdriver.Firefox()
driver.get(<URL_HERE>)
Bạn có thể tìm kiếm các thẻ, các phần tử html bằng một trong các cách sau đây:
  • Sử dụng selector
  • Sử dụng thuộc tính class
  • Sử dụng thuộc tính id
  • Sử dụng thuộc tính xpath
Với mỗi cách trên sẽ có 2 hàm: hoặc là tìm và trả về một phần tử duy nhất là phần tử đầu tiên tìm được, hoặc là trả về một list các phần tử.

Sau đây mình sẽ chỉ ví dụ với selector nhé:

Cách tìm kiếm selector/id/xpath/class của phần tử trên trình duyệt

login-fb-auto-01.gif
Cách copy được selector của phần tử trên trình duyệt

2.1.2 Lấy và trả về tất cả các phần tử theo selector
Bạn nên dùng khi mà bạn muốn lấy danh sách phần tử, nếu bạn chỉ cần 1 phần tử thì không nên dùng.
all_eles = driver.find_elements_by_css_selector('#email')
for ele in all_eles:
    # Do smth here

2.1.3 Lấy và trả về phần tử đầu tiên tìm được theo selector
element = driver.find_element_by_css_selector('#email')

2.1.4 Cách đếm xem có bao nhiêu phần tử đang có trên trang web đó

login-fb-auto-02.gif
Cách đếm số phần tử đang có theo selector

Sử dụng selector hoặc xpath là cách nhanh nhất và tốt nhất để truy xuất được tới phần tử mình cần. Tuy nhiên, trong nhiều trường hợp bạn sẽ phải tìm cách để tự lấy được selector để lấy được các phần tử mà bạn mong muốn.

2.1.5 Cách nhập giá trị cho thẻ input
Bạn sử dụng hàm send_keys, hàm này cũng cho phép gửi đi một phím nhấn trên bàn phím bạn nhé.
username_ele = driver.find_element_by_css_selector('#email')
username_ele.send_keys(<text_here>)

2.1.6 Cách click vào một phần tử dùng Selenium
Mỗi element mà bạn tìm được đều có hàm click(), bạn chỉ việc gọi đến là xong.
login_ele = self.driver.find_element_by_css_selector('#loginbutton > input[type="submit"]')
login_ele.click()

Như vậy, hàm login() của chúng ta sẽ được viết như sau. Lưu ý là sau mỗi hành động chúng ta sẽ sleep vài giây để tránh việc thực thi quá nhanh.
def login(self):
    self.driver.get(FB_URL)
    username_ele = self.driver.find_element_by_css_selector('#email')
    username_ele.send_keys(self.username)
    random_sleep(1, 5)
    password_ele = self.driver.find_element_by_css_selector('#pass')
    password_ele.send_keys(self.password)
    random_sleep(1, 5)
    login_ele = self.driver.find_element_by_css_selector('#loginbutton > input[type="submit"]')
    random_sleep(1, 5)
    login_ele.click()
2.2 Xây dựng hàm kiểm tra đăng nhập thành công
Bạn có thể kiểm tra, nếu đăng nhập thành công thì bạn sẽ không thể tìm thấy element username_ele này nữa. Như vậy, chúng ta chỉ cần xem có tìm được phần tử này không là sẽ biết đăng nhập thành công không. Đây chỉ là một trong số vô vàn cách để bạn có thể thực hiện nhé.
def verify_login(self):
    try:
        self.driver.find_element_by_css_selector('#email')
        return False
    except:
        return True
Lý do: Nếu driver không tìm được phần tử thì nó sẽ raise ra một exception. Do đó, nếu xảy ra except tức là bạn đăng nhập thành công rồi.

3. Code Selenium tự động đăng nhập Facebook
Dưới đây là full source code của chức năng tự động đăng nhập fb, để xem kết quả thì bạn có thể quay lại ảnh gif ở đầu bài nhé.
import argparse
import sys
from random import randint
from time import sleep
 
from selenium import webdriver
 
FB_URL = "https://fb.com"
 
 
def random_sleep(min_s, max_s):
    sleep(randint(min_s, max_s))
 
 
class FacebookLogin:
    def __init__(self, username, password):
        self.username = username
        self.password = password
        self.driver = webdriver.Firefox()
 
    def login(self):
        self.driver.get(FB_URL)
        username_ele = self.driver.find_element_by_css_selector('#email')
        username_ele.send_keys(self.username)
        random_sleep(1, 5)
        password_ele = self.driver.find_element_by_css_selector('#pass')
        password_ele.send_keys(self.password)
        random_sleep(1, 5)
        login_ele = self.driver.find_element_by_css_selector('#loginbutton > input[type="submit"]')
        random_sleep(1, 5)
        login_ele.click()
 
    def verify_login(self):
        try:
            self.driver.find_element_by_css_selector('#email')
            return False
        except:
            return True
 
 
if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Auto FB login')
    parser.add_argument('--username', default=None, required=True, help='FB username')
    parser.add_argument('--password', default=None, required=True, help='FB password')
 
    try:
        options = parser.parse_args()
    except:
        parser.print_help()
        sys.exit(0)
 
    fb = FacebookLogin(options.username, options.password)
    fb.login()
    if fb.verify_login():
        print('Đăng nhập thành công!')
    else:
        print('Đăng nhập thất bại')
 
    fb.driver.close()
 
Cách chạy:
usage: facebook.py [-h] --username USERNAME --password PASSWORD
 
Auto FB login
 
optional arguments:
  -h, --help           show this help message and exit
  --username USERNAME  FB username
  --password PASSWORD  FB password
usage: facebook.py [-h] --username USERNAME --password PASSWORD
 
Auto FB login
 
optional arguments:
  -h, --help           show this help message and exit
  --username USERNAME  FB username
  --password PASSWORD  FB password
 
# Ví dụ:
python facebook.py --username your_username --password your_password

4. Tài liệu bổ sung

Nguồn bài viết: Sưu tầm

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML