Bạn cảm thấy khá mệt mỏi và lười khi phải bão like cho một ai đó hay bạn chỉ muốn tạo một bộ công cụ nào đó để cho vui.
Hôm nay chúng ta sẽ cùng nhau tìm hiểu về một bộ framework tuyệt vời và bắt đầu sử dụng nó để thử đăng nhập vào Facebook

Selenium là gì?
Theo wikipedia, Selenium hay Selen là là một nguyên tố hóa học với số nguyên tử 34 và ký hiệu hóa học Se. Nó là một phi kim, về mặt hóa học rất giống với lưu huỳnh và telua, và trong tự nhiên rất hiếm thấy ở dạng nguyên tố.


Bắt đầu thử đăng nhập vào Facebook với Selenium
Cài đặt ban đầu
Trong series bài hướng dẫn này mình sẽ sử dụng ngôn ngữ lập trình python3 và chạy trên hệ điều hành Ubuntu
Trước hết chúng ta cần cài đặt selenium về máy tính. Sử dụng lệnh bên dưới để cập nhật phiên bản mới nhất của selenium
pip3 install -U selenium

Tiếp theo mình cần phải cài đặt một Webdriver. Chúng là những trình duyệt Web mà selenium sẽ sử dụng và trong series này mình sẽ sử dụng Webdriver Firefoxlink tại đây.

Chọn geckodriver-v0.26.0-linux32.tar.gz nếu bạn muốn nó chạy trên nền 32bit hoặc geckodriver-v0.26.0-linux64.tar.gz nếu bạn muốn chạy trên nền 64bit.
Lưu ý :bạn có thể sẽ download phiên bản khác v0.26.0. Tuy nhiên do ở thời điểm hiện tại đây là phiên bản mới nhất nên mình để xuất nó. Nếu có phiên bản mới hơn bạn vẫn có thể download và sử dụng như bình thường
Sau khi đã download, giải nén file đó ra và lưu tại /usr/bin/ folder.


Cài đặt xong, bước tiếp theo chúng ta cần chạy thử xem chúng đã hoạt dộng được chưa. Trước hết chúng ta cần khai báo trong file python
from selenium import webdriver
driver = webdriver.Firefox()

Sau khi lưu lại file trên và chạy nếu chương trình không báo lỗi và hiển thị Firefox tức là chúng ta đã cài đặt thành công.

Đăng nhập Facebook bằng Selenium
Bây giờ chúng ta bắt đầu đăng nhập vào Facebook. Để có thể làm được điều này chúng ta cần thêm một hàm là getpass trong module getpass. Nó sẽ giúp chúng ta che đi mật khẩu khi đăng nhập ở terminal. Đây là một module có sẵn nên bạn không cần phải dùng pip để cài đặt nó.
Nhập email và mật khẩu
Trước hết chúng ta sẽ tạo ra một đối tượng là Account có 2 thuộc tính là là email và pwd để có thể dùng lại sau này.
| class Account(object): | |
| def __init__(self, email , pwd): | |
| self._email = email | |
| self._pwd = pwd | |
| def get_email(self): | |
| return self._email | |
| def set_email(self, email): | |
| self._email = email | |
| def get_password(self): | |
| return self._pwd | |
| def set_password(self, pwd): | |
| self._pwd = pwd |
Tiếp theo chúng ta sẽ tạo thêm một đối tượng mới là đối tượng đăng nhập Facebook
Chúng ta sẽ sử dụng một số method trong module của Selenium là
- get() truy cập tới đường link trong get
- find_element_by_css_selector()tìm phần tử đầu tiên theo thỏa mãn CSS Selector
- send_keys() Nhập vào vị trí phần tử một chuỗi ký tự
- find_element_by_id()Tìm phần tử đầu tiên có id cho sẵn
- click() thực hiên event click của phần tử
- find_elements_by_css_selector()Tìm tất cả các phần tử thỏa mãn CSS Selector
Trong Firefox có hai giai diện đăng nhập Facebook và mỗi một giao diện có cách nhấn đăng nhập khác nhau nên bạn có thể thấy được có 2 cách nhấn Đăng nhập trong method _submit()
| class FBLogin(object): | |
| def __init__(self, driver, account): | |
| self._driver = driver | |
| self._account = account | |
| def _access_fb(self): | |
| self._driver.get("https://facebook.com") | |
| def _insert_email(self): | |
| tbEmail = self._driver.find_element_by_css_selector("[name='email']") | |
| tbEmail.send_keys(self._account.get_email()) | |
| def _insert_password(self): | |
| tbPwd = self._driver.find_element_by_css_selector("[name='pass']") | |
| tbPwd.send_keys(self._account.get_password()) | |
| def _submit(self): | |
| try: | |
| self._driver.find_element_by_id('loginbutton').click() | |
| except: | |
| self._driver.find_element_by_css_selector("[name='login']").click() | |
| def login(self): | |
| self._access_fb() | |
| self._insert_email() | |
| self._insert_password() | |
| self._submit() | |
| def is_success(self): | |
| return (len(self._driver.find_elements_by_css_selector("[name='pass']")) == 0) |
Thử đăng nhập nào
| def login_to_facebook(driver): | |
| print('LOGIN TO FACEBOOK!') | |
| login = FBLogin(driver, get_account()) | |
| login.login() | |
| return login.is_success() | |
| def get_account(): | |
| email = str(input("Email> ")) | |
| pwd = getpass("Password for [%s]" %(email)) | |
| return Account(email, pwd) |