Luận văn Xây dựng hệ thống đồng bộ sản phẩm trên các trang thương mại điện tử bằng Autoit và Selenium

pdf 66 trang thiennha21 14/04/2022 3261
Bạn đang xem 20 trang mẫu của tài liệu "Luận văn Xây dựng hệ thống đồng bộ sản phẩm trên các trang thương mại điện tử bằng Autoit và Selenium", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfluan_van_xay_dung_he_thong_dong_bo_san_pham_tren_cac_trang_t.pdf

Nội dung text: Luận văn Xây dựng hệ thống đồng bộ sản phẩm trên các trang thương mại điện tử bằng Autoit và Selenium

  1. ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN KHẮC HƯNG XÂY DỰNG HỆ THỐNG ĐỒNG BỘ SẢN PHẨM TRÊN CÁC TRANG THƯƠNG MẠI ĐIỆN TỬ BẰNG AUTOIT VÀ SELENIUM Ngành: Công Nghệ Thông Tin Chuyên Ngành: Mạng máy tính và truyền thông dữ liệu Mã Số: 18025066 LUẬN VĂN THẠC SỸ CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: Ts. Trần Trúc Mai HÀ NỘI - NĂM 2020
  2. ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN KHẮC HƯNG XÂY DỰNG HỆ THỐNG ĐỒNG BỘ SẢN PHẨM TRÊN CÁC TRANG THƯƠNG MẠI ĐIỆN TỬ BẰNG AUTOIT VÀ SELENIUM Ngành: Công Nghệ Thông Tin Chuyên ngành: Mạng máy tính và truyền thông dữ liệu Mã số: 18025066 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. TRẦN TRÚC MAI Hà Nội – 2020
  3. LỜI CẢM ƠN Trước tiên, tôi xin gửi lời cảm ơn sâu sắc nhất đến thầy TS. Trần Trúc Mai, người thầy đã tận tâm, tận lực hướng dẫn, định hướng phương pháp nghiên cứu khoa học cho tôi, đồng thời cung cấp nhiều tài liệu và tạo điều kiện thuận lợi trong suốt quá trình học tập và nghiên cứu để tôi có thể hoàn thành luận văn này. Tôi cũng xin được gửi lời cảm ơn đến các thầy, cô trong bộ môn Mạng máy tính và truyền thông dữ liệu và Khoa Công nghệ thông tin, Trường Đại học Công nghệ - Đại học Quốc gia Hà Nội đã nhiệt tình giảng dạy và truyền đạt những kiến thức, kinh nghiệm quý giá trong suốt thời gian tôi học tập tại trường. Tôi xin gửi lời cảm ơn đến các bạn học viên khóa K25, những người đồng hành trong suốt khóa học và có nhiều góp ý bổ ích cho tôi. Cảm ơn gia đình, bạn bè đã quan tâm và động viên giúp tôi có nghị lực phấn đấu để hoàn thành tốt luận văn này. Do kiến thức và thời gian có hạn nên luận văn chắc chắn không tránh khỏi những thiếu sót nhất định. Tôi xin chân thành cảm ơn! Hà Nội, tháng 09 năm 2020 Học viên thực hiện Nguyễn Khắc Hưng
  4. LỜI CAM ĐOAN Tôi xin cam đoan luận văn “Xây dựng hệ thống đồng bộ sản phẩm trên các trang thương mại điện tử bằng AutoIT và Selenium” được hoàn thành bằng kiến thức tôi đã tiếp thu được trong suốt quá trình rèn luyện, học tập của tôi dưới sự hướng dẫn của TS. Trần Trúc Mai. Trong toàn bộ nội dung nghiên cứu của luận văn, các vấn đề được trình bày đều là những tìm hiểu và nghiên cứu của cá nhân tôi hoặc là trích dẫn các nguồn tài liệu đều được đưa ra ở phần tài liệu tham khảo. Tôi xin cam đoan những lời trên là sự thật và chịu mọi trách nhiệm trước thầy cô và hội đồng bảo vệ luận văn thạc sĩ. Hà Nội, tháng 09 năm 2020 Học viên thực hiện Nguyễn Khắc Hưng
  5. MỤC LỤC LỜI CẢM ƠN ii LỜI CAM ĐOAN iii MỤC LỤC 1 DANH MỤC BẢNG BIỂU 3 DANH MỤC HÌNH VẼ, ĐỒ THỊ 4 DANH MỤC CÁC TỪ VIẾT TẮT 5 PHẦN MỞ ĐẦU 6 CHƯƠNG 1. ĐẶT VẤN ĐỀ 8 1.1. Thương mại điện tử là gì? 8 1.2. Thực trạng thương mại điện tử trên thế giới 11 1.3. Tình hình thương mại điện tử ở Việt Nam 11 CHƯƠNG 2. CÁC NỀN TẢNG HỖ TRỢ THỰC THI TÁC VỤ TỰ ĐỘNG 13 2.1. AutoIT 13 Giới thiệu 13 Điểm mạnh của AUTOIT 13 Điểm yếu của AUTOIT 14 2.2. Selenium 19 19 2.2.1. Giới thiệu 19 2.2.2. Thành phần của Selenium 19 2.2.3. Chi tiết về Selenium WebDriver 21 2.3 Tại sao không sử dụng những công nghệ khác? 23 CHƯƠNG 3. XÂY DỰNG HỆ THỐNG, CÀI ĐẶT VÀ ĐÁNH GIÁ 25 3.1. Yêu cầu 25 3.2. Phân tích thiết kế 25 3.2.1. Người dùng của hệ thống 25 3.2.2. Kiến trúc của hệ thống 26 3.2.3. Bộ tạo/sửa các hành động mẫu 27 Nguyễn Khắc Hưng 1 Đ ạ i H ọ c Công Nghệ
  6. 3.2.3.1 Kiến trúc hệ thống 27 3.2.3.2 Định nghĩa hành động, bước hành động 28 3.2.3.3 Biểu đồ Use case 29 3.2.3.4 Thiết kế cơ sở dữ liệu 30 3.2.3.5 Thiết kế các API 32 3.2.3.6 Một vài thuật toán. 33 3.2.4 Bộ thực thi các hành động 38 3.2.4.1. Kiến trúc hệ thống 38 3.2.4.2 Biểu đồ Use case 39 3.2.4.3 Thiết kế cơ sở dữ liệu 39 3.2.4.4 Thiết kế các API 41 3.2.5. Trang web dành cho người dùng 41 3.2.5.1. Kiến trúc hệ thống 41 3.2.5.2 Biểu đồ Use case 42 3.2.5.3 Thiết kế cơ sở dữ liệu 45 3.2.5.4 Thiết kế các API 47 3.2.5.5 Một vài thuật toán 48 3.3. Kết quả xây dựng 50 3.3.1. Các giao diện web dành cho người bán hàng 50 3.3.2. Các giao diện phía server 54 3.4. Cài đặt và thử nghiệm 56 3.4.1. Yêu cầu hệ thống 56 3.4.2. Quá trình tự động hóa các thao tác 57 3.5. Kết quả 57 3.6. Định hướng phát triển trong tương lai 58 3.6.1. Xây dựng trang tổng quát cho admin 58 3.6.2. Hỗ trợ thêm các hành động 58 3.6.3. Phát triển theo mô hình Server farm 58 CHƯƠNG 4. KẾT LUẬN 60 TÀI LIỆU THAM KHẢO 61 Nguyễn Khắc Hưng 2 Đ ạ i H ọ c Công Nghệ
  7. DANH MỤC BẢNG BIỂU Bảng 2-1: Các hàm biến môi trường trong AUTOIT 15 Bảng 2-2: Các hàm phát âm thanh 15 Bảng 2-3: Các hàm xử lý thư mục 16 Bảng 2-4: Các hàm tiện ích bàn phím 16 Bảng 2-5: Các hàm toán học 17 Bảng 2-6: Các hàm xử lý chuỗi 17 Bảng 2-7: Các hàm xử lý hộp thoại 17 Bảng 2-8: Các hàm xử lý tiến trình 18 Bảng 2-9: Một số hàm khác của AutoIT 18 Bảng 3-1: Danh sách các hành động chủ yếu khi đăng sản phẩm 29 Bảng 3-2: Danh sách các API module tạo sửa hành động mẫu 33 Bảng 3-3: Các hàm thủ tục mà hệ thống hỗ trợ gọi AutoIT 34 Bảng 3-4: Các hàm thủ tục mà hệ thống hỗ trợ gọi Selenium 35 Bảng 3-5: Danh sách các API module thực thi hành động. 41 Bảng 3-6: Danh sách các API module web quản trị 48 Nguyễn Khắc Hưng 3 Đ ạ i H ọ c Công Nghệ
  8. DANH MỤC HÌNH VẼ, ĐỒ THỊ Hình 1-1: Khái niệm thương mại điện tử (nguồn internet) 8 Hình 1-5: Giá trị thị trường TMĐT liên tục tăng trưởng qua các năm 11 Hình 1-8: Doanh thu TMĐT B2C Việt Nam năm 2015 – 2019 (tỷ USD) 12 Hình 1-9: Quy mô thị trường thương mại điện tử B2C Việt Nam năm 2018 12 Hình 2-1: Nền tảng hỗ trợ tự động GUI AutoIT 13 Hình 2-2: Ví dụ về script của AutoIT 18 Hình 2-3: Các thành phần chính của Selenium 19 Hình 2-4: Kiến trúc của Selenium WebDriver 21 Hình 2-5: Selenium webdriver tương thích với nhiều trình duyệt 23 Hình 3-1: Kiến trúc hệ thống 26 Hình 3-2: Kiến trúc hệ thống module tạo sửa hành động mẫu 27 Hình 3-3: Lược đồ use case của phần tạo sửa hành động 29 Hình 3-4: Lược đồ quan hệ thực thể của phần tạo sửa hành động 31 Hình 3-5: Import thư viện hỗ trợ AutoIT 35 Hình 3-6: Cài đặt một hàm AutoIT với ngôn ngữ C# 36 Hình 3-7: Kiến trúc hệ thống phần tạo sửa hành động mẫu 38 Hình 3-8: Quy trình tạo hành động tác động lên sàn TMĐT 39 Hình 3-9: Lược đồ use case của phần thực thi tự động 39 Hình 3-10: Lược đồ thực thể quan hệ của phần tạo thực thi hành động 40 Hình 3-11: Sơ đồ khối module web dành cho người dùng 41 Hình 3-12: Biểu đồ Usecase của người dùng cuối 43 Hình 3-13: Quy trình đăng sản phẩm đồng bộ 43 Hình 3-14: Lược đồ quan hệ thực thể của phần web quản lý 45 Hình 3-15: Giao diện trang thống kê 50 Hình 3-16: Giao diện trang danh sách sản phẩm 51 Hình 3-17: Giao diện hộp thoại thêm sản phẩm mới 51 Hình 3-18: Giao diện trang quản lý tài khoản 52 Hình 3-19: Giao diện trang quản lý danh mục 53 Hình 3-20: Giao diện trang giá trị mặc định 54 Hình 3-21: Giao diện ứng dụng các hành động mẫu 55 Hình 3-22: Giao diện ứng dụng từng bước của hành động 55 Hình 3-23: Giao diện ứng dụng khi chạy thêm sản phẩm 56 Hình 3-24: Mô hình Server Farm 59 Nguyễn Khắc Hưng 4 Đ ạ i H ọ c Công Nghệ
  9. DANH MỤC CÁC TỪ VIẾT TẮT TMĐT Thương mại điện tử Script Mã kịch bản thự thi B2B Business to Business B2C Business to Customer C2C Customer to Customer G2G Government to Government GUI Graphic User Interface IDE Integrated Development Environment WTO World Trade Organization Nguyễn Khắc Hưng 5 Đ ạ i H ọ c Công Nghệ
  10. PHẦN MỞ ĐẦU Lý do chọn đề tài Cùng với sự phát triển của thiết bị di động và mạng máy tính. Thương mại điện tử, mua sắm trực tuyến càng ngày càng phát triển mạnh mẽ. Theo báo cáo của statistics thì doanh số bán lẻ trên các sàn thương mại điện tử năm 2019 đạt mức 3.535 tỷ Đô la Mỹ. Thị trường thương mại điện tử Việt Nam cũng nằm trong top các thị trường phát triển nhanh nhất thế giới với tỉ lệ tăng trưởng đạt gần 30% trong năm 2019. Hiện nay có rất nhiều người tham gia bán hàng trên các sàn thương mại điện tử. Trong số đó thì lại có không ít người tham gia vào nhiều hơn một sàn để có thể bán được nhiều hàng hóa hơn, phủ kênh sản phẩm tốt hơn. Việc phải đăng cùng một sản phẩm lên nhiều sàn là việc khá tốn thời gian, công sức lại có thể nhầm lẫn về số lượng hàng tốn, giá bán, hoặc thời điểm bán cho mỗi đơn hàng. Vì vậy nếu xây dựng được một công cụ hỗ trợ đăng sản phẩm lên đồng thời nhiều sàn TMĐT thì sẽ hỗ trợ rất tốt cho người bán hàng. Qua tìm hiểu và phân tích một số giải pháp trước đây, tác giả thấy có những bài nghiên cứu trước sử dụng phương pháp đăng sản phẩm qua kết nối bằng API. Tuy nhiên phương pháp này không triệt để nên qua một thời gian nghiên cứu tác giả đã tìm ra một giải pháp triệt để hơn. Đó là sử dụng các nền tảng hỗ trợ thực thi tác vụ động là AutoIT và Selenium để giả lập hành vi của người dùng. Thay vì một người dùng thao tác trên nhiều sàn, người dùng chỉ cần nhập sản phẩm 1 lần. Hệ thống sẽ sinh ra các mã kịch bản để các AutoBot đăng sản phẩm lên các sàn khác nhau. Mục đích nghiên cứu của luận văn, đối tượng, phạm vi nghiên cứu Mục đích của luận văn: Nghiên cứu đề tài này nhằm mục đích tìm ra phương pháp đồng bộ sản phẩm lên các sàn thương mại điện tử mà giải quyết triệt để được vấn đề mà hướng giải quyết trước đây chưa làm được: Hỗ trợ toàn diện tất cả các sàn. Khi Nguyễn Khắc Hưng 6 Đ ạ i H ọ c Công Nghệ
  11. các sàn có sự thay đổi thì không cần người có kỹ năng lập trình vẫn có thể cập nhật để hoạt động hoạt động ổn định. Đối tượng và phạm vi áp dụng: Đối tượng áp dụng là việc đăng sản phẩm lên nhiều sàn TMĐT mà không sử dụng API. Phạm vi áp dụng là tất cả các sàn phổ biến ở Việt Nam Để đặt được mục tiêu trên đề tài tập trung tìm hiểu các nội dung sau: - Tìm hiểu về nền tảng AutoIT và Selenium, biết được điểm mạnh, điểm yếu của từng nền tảng để có cách giải quyết phù hợp - Phân tích về luồng khi đăng sản phẩm lên các sàn - Xây dựng các đầy đủ kiến trúc hệ thống, mô hình client server để giải quyết yêu cầu bài toán. Nội dung luận văn Luận văn này gồm 4 chương, cụ thể như sau: Chương 1: ĐẶT VẤN ĐỀ Giới thiệu về thương mại điện tử, về thực trạng thương mại điện tử hiện này trên thế giới và các trang thương mại điện tử phổ biến nhất ở Việt Nam hiện nay. Chương 2: CÁC NỀN TẢNG HỖ TRỢ THỰC THI TÁC VỤ TỰ ĐỘNG Các nền tảng hỗ trợ thực thi tác vụ tự động. Một là AutoIT - Nền tảng hỗ trợ tự động hóa các thao tác GUI và thao tác người dùng. Hai là Selenium WebDriver để tương tác với web. Chương 3: XÂY DỰNG HỆ THỐNG, CÀI ĐẶT VÀ ĐÁNH GIÁ Phân tích yêu cầu, thiết kế luồng, giao diện của hệ thống Cái đặt và đưa ra kết quả thực nghiệm Nguyễn Khắc Hưng 7 Đ ạ i H ọ c Công Nghệ
  12. CHƯƠNG 1. ĐẶT VẤN ĐỀ 1.1. Thương mại điện tử là gì? Định nghĩa của WTO “Thương mại điện tử bao gồm việc sản xuất, quảng cáo, bán hàng và phân phối sản phẩm được mua bán và thanh toán trên mạng Internet, nhưng được giao nhận một cách hữu hình, cả các sản phẩm giao nhận cũng như những thông tin số hoá thông qua mạng Internet” [1]. Ủy ban châu Âu định nghĩa: Thương mại điện tử có thể định nghĩa chung là sự mua bán, trao đổi hàng hóa hay dịch vụ giữa các doanh nghiệp, gia đình, cá nhân, tổ chức tư nhân bằng các giao dịch điện tử thông qua mạng Internet hay các mạng máy tính trung gian (thông tin liên lạc trực tuyến). Thật ngữ bao gồm việc đặt hàng và dịch thông qua mạng máy tính, nhưng thanh toán và quá trình vận chuyển hàng hay dịch vụ cuối cùng có thể thực hiện trực tuyến hoặc bằng phương pháp thủ công [2]. Hiểu một cách đơn giản thì thương mại điện tử chính là các hoạt động kinh doanh, sản xuất, giao dịch, mua bán, thanh toán, đặt hàng, quảng cáo và kể cả giao hàng sử dụng các phương tiện công nghệ điện tử chủ yếu là qua máy tính và điện thoại có kết nối internet. Hình 1-1: Khái niệm thương mại điện tử (nguồn internet) Nguyễn Khắc Hưng Đại Học Công Nghệ 8
  13. Thế giới ngày này phát triển một cách bùng nổ về mạng và điện toán đám mây, mọi người có thể kết nối với nhau một cách nhanh chóng và dễ dàng hơn thông qua các loại hình dich vụ trực tuyến. Thương mại điện tử có khả năng giúp ích cho nhiều khách hàng sẽ mua được sản phẩm rẻ hơn, thuận lợi hơn, nhanh hơn, hiệu quả hơn còn doanh nghiệp có thể đưa sản phẩm của mình đến với thị trường một cách nhanh nhất, bán hàng thuận lợi hơn. Thương mại điện tử diễn ra trên các phương tiện điện tử như bảng biểu, trang web hay ứng dụng điện thoại. Thương mại điện tử có phụ thuộc vào sự phát triển của công nghệ như công nghệ mạng, công nghệ quản trị cơ sở dữ liệu, công nghệ web, công nghệ di động và càng ngày càng không phụ thuộc trình độ của người sử dụng. Các bên tiến hanh giao dịch không nhất thiết phải gặp gỡ trực tiếp với nhau. Càng ngày thì các trang thương mại điện tử càng có nhiều dữ liệu từ người dùng và thông minh hơn, hiểu người mua cần mua gì hơn. Không cần phải đầu tư với số vốn lớn Với các doanh nghiệp vừa và nhỏ, chỉ cần họ có 1 chiếc smartphone là cũng có thể bán hàng. Đặc biệt với sự phát triển của mạng xã hội và công nghệ truyền hình trực tuyến, ai cũng có thể “Live stream” và bán bất cứ sản phẩm nào mình có. Giảm chi phí mặt bằng kinh doanh, tiếp thị Thương mại điện tử giúp ích rất nhiều trong việc giảm chi phí thuê mặt bằng. Nếu trước đây để bản được hàng người bán cần thuê “mặt tiền” để khách hàng qua lại nhìn thấy và mua sản phẩm thì ngày nay, ngay cả khi bạn ở sâu trong ngõ nhỏ hoặc chung cư thì người mua hàng hoặc đơn vị giao vận có thể đến chuyển hàng giúp. Và người bán hàng không cần phải có văn phòng để để giấy tờ sổ sách vì mọi giao dịch đều được lưu trữ trên máy tính, việc mua bán diễn ra Nguyễn Khắc Hưng Đại Học Công Nghệ 9
  14. nhanh chóng và dễ dàng nên không cần quá nhiều nhân công cho nên giảm được chi phí về nguồn nhân lực. Xây dựng quan hệ lâu dài với khách hàng Thương mại điện tử giúp các bên có thể trao đổi tức thì, liên tục và nhiều lần. Nhiều chủ cửa hàng chọn hình thức quảng cáo qua tin nhắn, tức là khi khách hàng đến mua sản phẩm, chủ shop sẽ đăng kí thông tin cho khách bằng số điện thoại và gửi khuyến mại qua tin nhắn cho khách hàng. 1.1.5.1. Chuyển sang sử dụng thiết bị di động Theo thống kê số lượt truy cập trên hệ thống hơn 33.000 trang web khách hàng của Sapo Web năm 2018, có tới hơn 60% số lượt truy cập vào trang web là từ thiết bị di động, tăng 5% so với năm 2017. Ngoài ra, theo sự ghi nhận của các công ty nghiên cứu thị trường, khoảng 70% lượng thời gian trực tuyến của người tiêu dùng là qua thiết bị di động và cứ hai lần mua sắm trực tuyến thì có một lần đặt qua điện thoại. Đồng thời, người tiêu dùng vẫn duy trì thói quen xem hàng trên di động, đặt mua hàng trên máy tính vì quá trình thanh toán rõ ràng hơn (có lẻ do màn hình to hơn). Do đó, nếu nền tảng thanh toán trên di động làm tốt hơn nữa trong thời gian tới, số lượng khách hàng chuyển qua mua sắm qua di động có khả năng tăng nhanh so với hiện nay. iPrice cũng cho biết các doanh nghiệp TMĐT tại Việt Nam có tỷ lệ chuyển đổi lượt truy cập các trang web TMĐT thành đơn hàng cao nhất trong khu vực Đông Nam Á với 65%, tiếp đến là Singapore và Indonesia 1.1.5.2. Sử dụng nhiều công nghệ để phát triển Để tăng trải nghiệm người dùng, quảng cáo đúng đối tượng và giao hàng nhanh chóng tiết kiệm thì công nghệ là điều không thể thiếu. Ví dụ để quảng cáo hiệu quả, các sàn hoặc trang quảng cáo, marketing liên kết sử dụng Big Data và Machine Learning vào để target đối tượng được chính xác hơn. Hoặc sử dụng Robot vào các kho hàng, AI vào việc nên để sản phẩm ở kho nào thì dễ giao hàng tới nhiều người mua hàng nhất. Nguyễn Khắc Hưng Đại Học Công Nghệ 10
  15. 1.1.5.3. Phát triển theo hướng của mạng xã hội Để tăng trải nghiệm người dùng các trang thương mại điện tử liên tục tung ra các tính năng mới nhằm “cung cấp các tính năng mang tính xã hội cho người dùng như tạo nội dung để tương tác với bạn bè, người mua hàng và người bán hàng”. Tháng 3 năm 2019 Shopee giới thiệu tính năng Shopee Live và shopee feed, y như những tính năng chính của mạng xã hội Facebook. Thực trạng thương mại điện tử trên thế giới TMĐT là ngành tăng trưởng mạnh nhất trên thế giới. Trong các năm qua thì thị trường thương mại điện tử thế giới không ngừng gia tăng. Và theo dự báo của statista thì giá trị thị trường năm 2019 sẽ đạt mức 3.535 tỷ USD và tiếp tục tăng gần gấp đôi giá trị (với 4.878 tỷ USD) [3] vào năm 2021. Sales 7000 6542 6000 5692 4927 5000 4206 4000 3535 2982 3000 2382 1845 2000 1336 1548 1000 0 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 Hình 1-2: Giá trị thị trường TMĐT liên tục tăng trưởng qua các năm Cùng nhìn vào sự phát triển của hai sàn thương mại điện tử đứng đầu thế giới và đứng đầu châu Á tại thời điểm hiện tại là Amazon và Alibaba. 1.2. Tình hình thương mại điện tử ở Việt Nam Cùng sự phát triển nhanh chóng của mạng internet và thiết bị di động thông minh, thương mại điện tử ở Việt Nam có sự bứt tốc bùng nổ. Theo Statista, tổng doanh thu của các công ty thương mại điện tử tại Việt Nam đạt 2,26 tỷ USD, tăng gần 30% so với năm 2017. Với kết quả đó, Việt Nam vươn lên top 6 trong 10 thị trường thương mại điện tử lớn nhất thế giới. Trên thị trường này, Việt Nam chỉ Nguyễn Khắc Hưng Đại Học Công Nghệ 11
  16. xếp sau những “ông lớn” như Trung Quốc, Mỹ, Anh, Nhật Bản và Đức. Tổng lượng người mua hàng trên các sàn thương mại điện tử trong năm 2018 đạt 49,8 triệu người. Dự kiến, con số này tăng lên 51,1 triệu người vào năm 2019 xu hướng mua sắm trên di động ngày càng tăng, chiếm đến 72% số đơn hàng. Theo Sách trắng thương mại điện tử Việt Nam 2019, thương mại điện tử bán lẻ - B2C của Việt Nam đã có mức tăng trưởng cao nhất trong 3 năm trở lại đây, tăng tới 30%. Mức tăng trưởng của thương mại điện tử Việt Nam trong 2 năm 2016 và 2017 lần lượt là 23% và 24%. Doanh thu B2C 12 10.08 10 8.06 8 6.2 6 5 4.07 4 2 0 2015 2016 2017 2018 2019 Hình 1-3: Doanh thu TMĐT B2C Việt Nam năm 2015 – 2019 (tỷ USD) Hạng mục 2015 2016 2017 2018 2019 Ước tính số người tham gia mua sắm trực tuyến 30,3 32,7 33,6 39,9 44,8 (triệu người) Ước tính giá trị mua sắm trực tuyến của một người 160 170 186 202 225 USD) Tỷ trọng doanh thu TMĐT B2C so với tổng mức bán 2,8% 3% 3,6% 4,2% 4,9% lẻ hàng hóa và doanh thu dịch vụ tiêu dùng cả nước Tỷ lệ người dân sử dụng Internet 22 54% 54,2% 58,1% 60% 66% (Nguồn: Sách trắng thương mại điện tử Việt Nam 2019) Hình 1-4: Quy mô thị trường thương mại điện tử B2C Việt Nam năm 2018 Nguyễn Khắc Hưng Đại Học Công Nghệ 12
  17. CHƯƠNG 2. CÁC NỀN TẢNG HỖ TRỢ THỰC THI TÁC VỤ TỰ ĐỘNG 2.1. AutoIT Giới thiệu AutoIt là một ngôn ngữ lập trình được ra đời vào tháng 1 năm 1999 bởi Jonathan Bennett. AutoIt có cú pháp tương tự gần như ngôn ngữ BASIC được thiết kế để tự động hóa các GUI (giao diện người dùng) như giả lập phím nhấn, di chuyển chuột, và thực hiện một số thao tác phức tạp khác trên cửa sổ, thao tác với tập tin, thư mục. AutoIt bước đầu được thiết kế để cấu hình tự động hoá và hàng ngàn máy tính cá nhân. Với dung lượng vô cùng nhỏ gọn, và đồng thời chạy độc lập được trên mọi các phiên bản của Windows mà không cần các chương trình runtime chạy nền. Hiện tại phiên bản mới nhất: 3.3.14.3 (Phát hành tháng 2, 2018) [13]. Hình 2-1: Nền tảng hỗ trợ tự động GUI AutoIT Điểm mạnh của AUTOIT Dễ dàng tiếp cận dành cho người mới bắt đầu với cú pháp đơn giản. Mô phỏng sự kiện chuột và keystrokes Tương tác với tất cả các cửa sổ theo tiêu chuẩn kiểm soát và các tiến trình của hệ điều hành. Mã thực thi có thể thực thi độc lập với quá trình biên soạn. Tạo giao diện GUI tương tác với người dùng hỗ trợ COM Nguyễn Khắc Hưng Đại Học Công Nghệ 13
  18. Tương thích với tất cả phiên bản hệ điều hành của Windows và có hỗ trợ x64 và Unicode. Có thể gọi các hàm giao diện lập trình ứng dụng (API) và các thư viện động (DLL) một cách có định hướng. Cộng đồng hỗ trợ vô cùng lớn kèm theo tài liệu chi tiết. AutoIt hoàn toàn miễn phí nhưng nhà phát triển có thể quyên góp tiền bạc hoặc đóng góp công sức cho cộng đồng phát triển AutoIt. Autoit được xem là một ngôn ngữ hỗ trợ tốt để viết các tiện ích auto. Ví dụ như là auto webgame, keylogger, botnet, auto click chuột, auto đăng nhập và những thao tác tự động khác mà không cần đến sự can thiệp của người dùng. Với công cụ Aut2Exe, các kịch bản có thể được biên dịch thành tệp tin thực thi (*.exe) Điểm yếu của AUTOIT Ngoài các thuận lợi nêu ở trên, AutoIt cũng mắc phải một số điểm chưa tốt gây bất tiện cho người dùng: • Dữ liệu không xác định kiểu: AutoIt không định nghĩa kiểu dữ liệu cho các biến làm cho rất khó debug. • Chưa hỗ trợ đa tiến trình (multi-thread). • Chưa hỗ trợ đầy đủ bộ xử lý sự kiện với chuột như sự kiện MouseHover, MouseMove. • Khả năng bị dịch ngược: dễ dàng để giải mã mã nguồn và cần dùng thêm một số thủ thuật để khắc phục sau khi biên dịch mã nguồn của AutoIt mặc dù đã được nén và mã hóa luôn vào tệp tin thực thi. • Thường bị trình diệt vi-rút cho luôn là Trojan/Malware. Với mục đích ban đầu AutoIT được sử dụng để viết các chương trình Auto để giải quyết các nhu cầu về công việc nào đó. Đa số trong số đó là AutoGame, AutoSendRequest. Tuy nhiên có vẻ như nhiều người sử dụng AutoIT để viết các mã độc virus malware hay nổi tiếng hơn là Botnet/RAT - Cái này chuyên để tạo ra những troijan. Yahoo ngày xưa cũng bị phát tán virus năm 2006, hầu hết các mã độc đó đều được viết bằng AutoIT. Vậy nên sau một thời gian dài thì các trình Nguyễn Khắc Hưng Đại Học Công Nghệ 14
  19. diệt virus chỉ cần nhận diện "chữ ký" của ứng dụng đó là AutoIt thì coi là virus/malware luôn. Các hàm, thủ tục AUTOIT hỗ trợ Hàm xử lý biến môi trường trong Windows Thông thường người dùng phải bấm phải chuột vào My Computer > Properties >Advanced, chọn Environment Variables để thiết lập biến môi trường trong Windows. AutoIT có sẵn một số hàm xử lý biến môi trường để làm việc này mà không phải thao tác như trên. Tên thủ tục Diễn giải EnvGet (Envvar) Trả về giá trị của một biến môi trường trong Windows. EnvSet(Envvar, value) Thiết lập giá trị cho một biến môi trường trong Windows. EnvUpdate() Cập nhật lại biến môi trường của Windows Bảng 2-1: Các hàm biến môi trường trong AUTOIT Hàm phát âm thanh hoặc kiểm tra hình ảnh. Tên thủ tục Diễn giải Beep([fre], [duration]) Phát tiếng bip bip trong 1 khoảng thời gian. SoundPlay(“filename”, [wait]) Chơi tập tin âm thanh có đường dẫn là filename. SoundSetWaveVolume(percent) Thiết lập lại biến môi trường của Windows PixelChecksum(left, top, right, Trả về số điểm ảnh trên một khu vực hình chữ nhật bottom, [step], [hwnd]) của màn hình. Lấy giá trị màu tại một điểm ảnh có tọa độ (x, y) nào PixelGetColor(x, y, [hwnd]) đó. Bảng 2-2: Các hàm phát âm thanh Hàm xử lý thư mục Tên thủ tục Diễn giải DirCopy(“sourcedir”, “destdir”, Sao chép các tập tin và thư mục con của thư [flag]) mục nguồn đến thư mục đích. DirCreate(“path”) Tạo thư mục theo đường dẫn path. Nguyễn Khắc Hưng Đại Học Công Nghệ 15
  20. DirMove(“sourcedir”, “destdir”, Di chuyển thư mục. [flag]) DirRemove(“path”, [flag]) Xóa thư mục. FileGetAttrib(“filename”) Lấy thông tin các thuộc tính của tập tin. FileOpenDialog(“title”, “dir”, Mở hộp thoại Open. “filter”) Chuyển đường dẫn thư mục làm việc hiện FileChangeDir(“path”) hành đến thư mục khác. Đọc toàn bộ nội dung của một tập tin văn FileRead(“filehandle/filename”) bản có tên là filename. FileWriteLine(“filename”, Ghi thêm thông tin dataline vào phần cuối “dataline”) của tập tin văn bản. Bảng 2-3: Các hàm xử lý thư mục Hàm tiện ích Bàn phím Tên thủ tục Diễn giải Gửi phím nhấn có mã keycode đến cửa sổ Send(“keycode”, [flagcode]) đang kích hoạt. HotKeySet(“key”) Gán phím nóng đến cửa sổ đang kích hoạt. Giữ một cửa sổ chương trình nào đó luôn luôn SendKeepActive(“Title”) được kích hoạt trong khi gọi hàm Send. Bảng 2-4: Các hàm tiện ích bàn phím Hàm toán học Tên thủ tục Diễn giải Abs(expression) Tính trị tuyệt đối của một con số Tính arcCosine của một con số. (hàm trả về theo đơn vị ACos(expression) radians) Tính arcsine của một con số. (hàm trả về theo đơn vị ASin(expression) radians) Tính arctangent của một số. (hàm trả về theo đơn vị Atan(expression) radians) Nguyễn Khắc Hưng Đại Học Công Nghệ 16
  21. Làm tròn một con số đến con số nguyên kế tiếp lớn hơn Ceiling(expression) nó Bảng 2-5: Các hàm toán học Hàm xử lý chuỗi Tên thủ tục Diễn giải StringCompare() So sánh hai chuỗi. StringInStr() Tìm vị trí của một chuỗi nhỏ trong một chuỗi lớn. StringIsAlNum() Kiểm tra chuỗi có phải là số. StringIsAlpha() Kiểm tra chuỗi có phải chỉ chứa các kí tự hay không StringLen() Trả về số kí tự có trong chuỗi StringReplace() Thay đổi nội dung của một chuỗi con nào đó trong chuỗi. Bảng 2-6: Các hàm xử lý chuỗi Hàm liên quan đến xử lý hộp thoại Tên thủ tục Diễn giải Xuất hiện một hộp nhập cho người dùng gõ chuỗi thông tin InputBox(“title”, “prompt”) vào MsgBox(flag, “title”, “text”) Xuất hiện một hộp thoại thông tin cho người dùng SplashTextOn ( "title", "text") Tạo một cửa sổ popup dạng text. Bảng 2-7: Các hàm xử lý hộp thoại Hàm quản lý tiến trình Tên thủ tục Diễn giải ProcessClose() Đóng một tiến trình đang chạy Kiểm tra xem một tiến trình nào đó có đang chạy ProcessExists() trong hệ thống hay không. ProcessSetPriority() Thiết lập chế độ ưu tiên của CPU cho một tiến trình Tạm dừng một đoạn mã script AutoIt đang thực thi ProcessWait(“process”, cho đến khi một tiến trình nào đó tồn tại chạy trong hệ [timeout]) thống Tạm dừng một đoạn mã script AutoIt đang thực thi ProcessWaitClose(“process”, cho đến khi một tiến trình nào đó không tồn tại chạy [timeout]) trong hệ thống. Nguyễn Khắc Hưng Đại Học Công Nghệ 17
  22. Bảng 2-8: Các hàm xử lý tiến trình Các hàm khác Tên thủ tục Diễn giải Các hàm xử lý Registry Đọc giá trị từ một mục nào đó trong Registry hay tạo trong Windows một khóa hoặc ghi giá trị đến Registry Các hàm xử lý biến và chuyển đổi Chuyển đổi về số từ 1 biểu thức, chuyển string sang mã hex hoặc binary Kích hoạt một cửa sổ của chương trình nào đó. Kiểm Các hàm quản lý cửa sổ tra sự tồn tại của cửa sổ. Lấy thông tin vị trí kích thước của cửa sổ Thêm các đối tượng control ở trên GUI như tạo Các hàm tạo các control Button Label Thay đổi các đối tượng control trên GUI như đổi màu Các hàm cập nhật control nền, xóa đối tượng, thiết lập giá trị Bảng 2-9: Một số hàm khác của AutoIT Ví dụ về việc sử dụng AUTOIT Hình 2-2: Ví dụ về script của AutoIT Nguyễn Khắc Hưng Đại Học Công Nghệ 18
  23. 2.2. Selenium Nói đến kiểm thử tự động không thể không kể đến Selenium, đây là bộ kiểm thử tự động phổ biến nhất hiện này. Selenium được xây dựng để hỗ trợ và khuyến khích kiểm thử tự động về mặt chức năng và giao diện của ứng dụng dạng web và thực thi trên một loạt các trình duyệt, nền tảng như Chrome, Mozilla, Internet Explorer, Safari. Selenium trở thành một trong những công cụ kiểm thử tự động được sử dụng nhất của các chuyên gia kiểm thử bởi là phần mềm mã nguồn mở và cộng đồng đông đảo [14]. Selenium là một bộ tập hợp các công cụ riêng rẽ. Mỗi công cụ được thiết kế tùy thuộc yêu cầu về môi trường kiểm thử để phục vụ các mục đích kiểm thử khác nhau. Gói Selenium bao gồm các thành phần sau: • Selenium IDE. • Selenium Remote Control (RC). • Selenium WebDriver. • Selenium Grid. Hình 2-3: Các thành phần chính của Selenium Selenium IDE (Selenium Integrated Development Environment) Selenium IDE được phát triển đầu tiên bởi lập trình viên người Nhật Bản Shinya Kasatani, ban đầu là một tiện ích mở rộng của Firefox. Trong quá trình thực hành và nghiên cứu với Selenium Core, ông đã thấy có thể mở rộng để tạo Nguyễn Khắc Hưng Đại Học Công Nghệ 19
  24. ra một môi trường phát triển tích hợp. Với nó, người dùng có thể tích hợp vào trình duyệt Mozilla Firefox. IDE có khả năng ghi lại và chạy sau đó (record and play back) các hành động của người dùng trên trình duyệt (trình duyệt này phải được tích hợp hỗ trợ bởi IDE). Kể từ năm 2006, gói Selenium đã tích hợp sẵn Selenium IDE. IDE đóng góp giá trị rất lớn cho cộng đồng kiểm thử Selenium. Selenium IDE là công cụ dễ sử dụng nhất trong bộ công cụ của gói Selenium. Tính năng ghi lại và chạy sau đó (record and play back) làm cho nó rất dễ học đối với những người đã biết chút về ngôn ngữ lập trình. Tuy nhiên, Selenium IDE cũng có một vài nhược điểm làm nó không thích hợp để sử dụng trong trường hợp các kịch bản kiểm thử thường xuyên bị thay đổi. Selenium RC (Selenium Remote Control) Selenium RC được viết bằng ngôn ngữ Java, cho phép thiết kế và thực thi kịch bản kiểm thử cho các ứng dụng dạng web. Selenium RC là sản phẩm sau khi đã khắc phục được một số điểm hạn chế của Selenium IDE/ Core. Một trong những hạn chế chủ yếu là vấn đề Same Origin: Đó là không cho phép truy cập DOM của một tài liệu từ một nguồn khác với nguồn mà chúng ta đang truy cập tài liệu. Cho nên để test với bất kỳ ứng dụng nào mà sử dụng Selenium Core, người ta phải cài đặt toàn bộ ứng dụng Selenium Core trên một server để khắc phục các vấn đề về chính sách Same origin. Selenium Grid Phát triển bởi Pat Lightbody để giải quyết cho việc thực hiện các bộ kiểm thử thử phân tán, kiểm thử ở nhiều môi trường khác nhau và tiết kiệm đáng kể thời gian thực hiện. Selenium WebDriver Được tạo vào năm 2006 bởi kỹ sư tại ThoughtWorks tên là Simon Stewart, Webdriver là một trong những công cụ kiểm thử tự động mạnh mẽ và thông dụng nhất. Đây chính là phiên bản mở rộng sau khi cải tiến các điểm không cần thiết cũng như hạn chế của Selenium RC, như không cần khởi chạy trước máy chủ Selenium khi thực thi các kịch bản kiểm thử. Và hơn hết, phiên bản WebDriver Nguyễn Khắc Hưng Đại Học Công Nghệ 20
  25. tương thích với rất nhiều nền tảng và trình duyệt. Công cụ WebDriver thử nghiệm Selenium được coi là một trong những lựa chọn ưu tiên nhất để thử nghiệm các ứng dụng dựa trên web. 2.2.3.1. Kiến trúc của WebDriver Selenium WebDriver là một khung web cho phép thực hiện các kiểm tra trình duyệt chéo. Công cụ này được sử dụng để tự động kiểm tra ứng dụng dựa trên web để xác minh rằng nó hoạt động được mong đợi. Selenium WebDriver cho phép chọn ngôn ngữ lập trình bạn chọn để tạo tập lệnh thử nghiệm. Như đã thảo luận trước đó, đây là một tiến bộ so với Selenium RC để khắc phục một vài hạn chế. Selenium WebDriver không có khả năng xử lý các thành phần cửa sổ, nhưng nhược điểm này có thể khắc phục bằng cách sử dụng các công cụ như Sikuli, Auto IT, v.v. Hình 2-4: Kiến trúc của Selenium WebDriver Mô tả chi tiết từng thành phần Thư viện khách hàng Selenium / Ràng buộc ngôn ngữ: Nguyễn Khắc Hưng Đại Học Công Nghệ 21
  26. Selenium cung cấp hỗ trợ cho nhiều thư viện như Ruby, Python, Java, v.v. vì các ràng buộc ngôn ngữ đã được phát triển bởi các nhà phát triển Selenium để cung cấp khả năng tương thích cho nhiều ngôn ngữ. Ví dụ: nếu muốn sử dụng trình điều khiển trình duyệt trong Python, hãy sử dụng Bindings Python. Có thể tải xuống tất cả các ràng buộc ngôn ngữ được hỗ trợ theo lựa chọn từ trang web chính thức của Selenium. Giao thức dây JSON JSON là từ viết tắt của Ký hiệu đối tượng JavaScript. Đó là một tiêu chuẩn mở cung cấp một cơ chế vận chuyển để truyền dữ liệu giữa máy khách và máy chủ trên web. Nó cung cấp hỗ trợ cho các cấu trúc dữ liệu khác nhau như mảng và đối tượng giúp đọc và ghi dữ liệu từ JSON dễ dàng hơn. JSON đóng vai trò là API REST (Chuyển giao trạng thái đại diện) để trao đổi thông tin giữa các máy chủ HTTP. Trình điều khiển trình duyệt Selenium cung cấp trình điều khiển cụ thể cho từng trình duyệt và không tiết lộ logic bên trong của chức năng trình duyệt, trình điều khiển trình duyệt tương tác với trình duyệt tương ứng bằng cách thiết lập kết nối an toàn. Các trình điều khiển trình duyệt này cũng dành riêng cho ngôn ngữ được sử dụng để tự động hóa trường hợp thử nghiệm. 2.2.3.2. Một số tính năng của Selenium WebDriver Tương thích với trình duyệt WebDriver hỗ trợ các loại trình duyệt thông thường hiện nay như: Chrome, FireFox cho đến những trình duyệt hiếm gặp như HtmlUnit. Trình duyệt HtmlUnit có thể chạy ở chế độ Headless, là quá trình thực thi mà không cần mở trình duyệt. Nguyễn Khắc Hưng Đại Học Công Nghệ 22
  27. Hình 2-5: Selenium webdriver tương thích với nhiều trình duyệt Tốc độ Bởi vì Driver giao tiếp không cần thông qua lớp trung gian nào mà trực tiếp kết nối thẳng với trình duyệt tương tự như người dùng cuối cho nên tốc độ của Driver tốt hơn rất nhiều so với các thành phần khác của bộ Selenium. Ví dụ như Selenium RC không giao tiếp trực tiếp với trình duyệt web mà chia thành 2 thư viện riêng biệt làm giảm tốc độ thực thi của những công cụ này vì phải trải qua tầng tầng lớp lớp giao tiếp. 2.3 Tại sao không sử dụng những công nghệ khác? Đầu tiên khi được đưa ra bài toán này, tác giả đã nghĩ ngay đến Selenium web driver vì tính linh động, hỗ trợ nhiều ngôn ngữ, nền tảng lập trình và triển khai được trên nhiều trình duyệt của nó. Nhờ các tính năng này của Selenium mà có thể giải quyết được gần như toàn bộ bài toán. Ví dụ với trang thương mại điện tử Vật giá, với selenium có thể giải quyết được 100% yêu cầu bài toán đặt ra. Tuy nhiên khi áp dụng với những trang thương mại điện tử lớn, tầm cỡ quốc tế thì gặp một số vấn đề như. Khả năng website nhận diện được trình duyệt tự động, chống spammer nên sẽ khó qua được bước đăng nhập vào trang web. Tiếp đến đó là khi người dùng muốn thao tác với việc đăng tải ảnh sản phẩm, với các truy vấn trên cây DOM sẽ không có cách nào thao tác được với hộp thoại trên windows. Nguyễn Khắc Hưng Đại Học Công Nghệ 23
  28. Từ đó tác giả mở rộng công cụ hỗ trợ sang AutoIT để hỗ trợ làm việc với các cửa sổ và giả lập thao tác người dùng cuối chính xác nhất. Ngoài 2 công cụ trên thì tác giả cũng thử nghiệm với công cụ tự động trên thiết bị di động như UIAutomator của hệ điều hành android. Tuy nhiên có 1 nhược điểm rất lớn đó là màn hình của thiết bị android nhỏ, việc tìm kiếm đối tượng trên thiết bị gặp khó khăn về độ trễ (thời gian tìm) cũng như độ chính xác (có thể các đối tượng chồng đè nên nhau). Vì vậy sau khi tìm hiểu thì tác giả quyết tâm chỉ sử dụng Selenium và AutoIT. Nguyễn Khắc Hưng Đại Học Công Nghệ 24
  29. CHƯƠNG 3. XÂY DỰNG HỆ THỐNG, CÀI ĐẶT VÀ ĐÁNH GIÁ 3.1. Yêu cầu Trước đây việc đồng bộ sản phẩm lên các trang thương mại điện tử bằng API vẫn còn tồn đọng 2 vấn đề chính: - Không phải sản thương mại điện tử nào cũng cung cấp các API để đăng sản phẩm lên. - Đôi khi các sàn thay đổi API, hoặc một số chính sách cấp quyền thì phải phải có người biết sửa mã lệnh (code) thì mới tiếp tục đồng bộ lên được. Việc giải quyết bài toàn bằng phương pháp sử dụng các công cụ hỗ trợ thao tác tự động như AutoIT hay Selenium sẽ giúp giải quyết triệt để hai vấn đề trên. Theo đó thì toàn bộ các trang TMĐT đều có thể áp dụng phương pháp này, đồng thời không chịu sự tác động của việc thay đổi cấu trúc, ngữ pháp API. Ngoài ra khi các thành phần trên web thay đổi thì chỉ người quản trị viên bình thường cũng thế cập nhật cấu hình để hệ thống hoạt động ổn đinh. 3.2. Phân tích thiết kế Người dùng cuối Người dùng cuối là các chủ cửa hàng có đăng các sản phẩm lên các trang thương mại điện tử. Thay vì vào lần lượt từng trang rồi đăng sản phẩm thì người dùng có thể thực hiện một trong hai cách sau: - Vào trang quản trị của hệ thống đăng một sản phẩm mẫu gồm đầy đủ tên, ảnh, giá cả - Vào trang chi tiết của một sản phẩm tại sàn đã có sản phẩm rồi gửi thông tin sản phẩm về hệ thống. Người quản trị Nguyễn Khắc Hưng Đại Học Công Nghệ 25
  30. Người quản trị hệ thống có tác vụ duy nhất là cập nhật bộ kịch bản theo khuôn mẫu mới. Về tổng quan hệ thống được triển khai theo mô hình kết hợp giữa Client – Server và Server – Application. Hình 3-1: Kiến trúc hệ thống Có thể chia toàn bộ hệ thống thành 3 thành phần chính: Bộ tạo/sửa các hành động mẫu: Đây là một ứng dụng phía Server giúp cho người quản trị có thể thêm/sửa/xóa các hành động. Ứng dụng được viết bằng ngôn ngữ C# trên framework WinForm, chi tiết về ứng dụng sẽ được trình bày ở mục 3.2.3 Bộ thực thi các hành động: Đây cũng là một ứng dụng Server nhưng thực hiện công việc chạy các hành động mà kết hợp từ hành động mẫu và dữ liệu sản phẩm. Chi tiết về ứng dụng sẽ được trình bày ở mục 3.2.4. Trang web dành cho người dùng Nguyễn Khắc Hưng Đại Học Công Nghệ 26
  31. Đây là giao diện mà người dùng sẽ tương tác, đồng thời phía Server của web sẽ thực hiện việc kết hợp giữa dữ liệu hành động mẫu và dữ liệu thực của người dùng để sinh ra hành động mới. chi tiết về trang web được trình bày cụ thể ở phần 3.2.5 3.2.3.1 Kiến trúc hệ thống Hình 3-2: Kiến trúc hệ thống module tạo sửa hành động mẫu Tầng client: Là nơi hiển thị các giao diện với người quản trị. Khi nhận thông tin từ người quản trị như thêm, sửa xóa, dữ liệu thì ứng dụng sẽ gọi các API để trao đổi và lưu trữ thông tin. Tầng server Đây là nơi cung cấp các API cho tầng client, sau đó xử lý thông tin và đưa vào cơ sở dữ liệu. Tầng dữ liệu Nguyễn Khắc Hưng Đại Học Công Nghệ 27
  32. Đây là nơi lưu trữ và thao tác truy vấn, quản lý cơ sở dữ liệu, tầng này được cài đặt dựa trên DB_Buider có sẵn của Codeigniter giúp cho việc triển khai các câu truy vấn được rành mạch, linh động. 3.2.3.2 Định nghĩa hành động, bước hành động Hành động (Action): Được hiểu như một hành động của người dùng cuối, hành động có mục đích rõ ràng. Ví dụ hành động như đăng nhập, đăng xuất. Bước hành động (Step): Là 1 hành vi đơn lẻ của người dùng cuối, một hoặc nhiều hành vi sẽ cấu thành nên hành động hay một hành động có thể chứa một hoặc nhiều hành vi. Ví dụ hành động mở trình duyệt gồm các hành vi là tìm đến biểu tượng Chrome rồi bấm chuột vào biểu tượng. ơ Mỗi website hay sàn TMĐT có các giao diện đăng sản phẩm khác nhau. Điều này có nghĩa là bộ các hành động trên mỗi sàn là khác nhau. Nhưng tựu chung lại để đăng được một sản phẩm thì cần có các hành động sau: STT Tên hành động Mô tả hành vi 1 Mở trình duyệt web Tìm biểu tượng của trình duyệt rồi kích đúp chuột 2 Truy cập sàn thương mại điện tử Dán đường link vào thanh địa chỉ sau đó nhấn Enter 3 Đăng nhập Điền username, password sau đó Enter hoặc bấm nút Đăng nhập 4 Chọn danh mục Chọn danh mục theo các mức 5 Tên sản phẩm và mã sản phẩm Nhập tên, mã vào textbox 6 Ảnh đại diện của sản phẩm Chọn ảnh từ bộ sưu tập hoặc tải từ máy tính 7 Giá gốc, giá khuyến mại của sản Nhập thông tin vào textbox phẩm, ngày bắt đầu và kết thúc khuyến mại, số lượng hàng còn 8 Nhập Mô tả về sản phẩm Nhập thông tin vào textbox 9 Nhập nhãn hiệu Nhập thông tin vào textbox 10 Nhập Màu sắc Chọn trong danh sách màu có sẵn, hoặc nhập mã màu hoặc chọn từ bảng màu Nguyễn Khắc Hưng Đại Học Công Nghệ 28
  33. 11 Nhập Kiểu dáng Nhập thông tin vào textbox hoặc chọn trong danh sách có sẵn 12 Nhập Kích thước Nhập thông tin vào textbox hoặc chọn trong danh sách có sẵn 13 Nhập Khối lượng Nhập thông tin vào textbox hoặc chọn trong danh sách có sẵn Bảng 3-1: Danh sách các hành động chủ yếu khi đăng sản phẩm 3.2.3.3 Biểu đồ Use case Đăng nhập > Xác thực tài khoản > Đăng xuất Thêm/sửa Website Thêm hành động Sửa hành động Thêm phiên bản > > Xóa hành động Người quản trị > Quản lý hành động Thêm bước > Quản lý bước hành động > Sửa bước > Xóa bước Hình 3-3: Lược đồ use case của phần tạo sửa hành động a) Xác thực tài khoản Mô tả: Khi người quản trị thao tác với hệ thống cần đăng nhập mật khẩu. Để đảm bảo tính an toàn cho hệ thống, người quản trị cần đăng nhập 2 bước gồm mật khẩu thường và OTP được gửi qua email. Tài khoản này sẽ không được đăng ký mà sẽ do Super Admin của hệ thống cung cấp. b) Thêm/sửa website Nguyễn Khắc Hưng Đại Học Công Nghệ 29
  34. Mô tả: Website được hiểu là một sàn thương mai điện tử. khi trên thị trường xuất hiện thêm một sàn mới thì người quản trị sử dụng chức năng này để thêm mới hoặc sửa thông tin website cũ. c) Thêm phiên bản Mô tả: Để lưu lịch sử phiên bản thì khi sàn TMĐT của những thay đổi lớn về mặt giao diện, người quản trị nên tạo phiên bản mới thay vì cập nhật lại toàn bộ danh sách hành động, bước hành động cũ. d) Quản lý hành động Mô tả: Khi tạo phiên bản mới hoặc thay đổi phiên bản cũ, người quản trị sẽ thêm mới, thay đổi các hành động để phù hợp với giao diện. Ví dụ khi phần đăng sản phẩm thêm một thuộc tính mới hoặc bỏ một thuộc tính. e) Quản lý bước hành động Mô tả: Khi giao diện của website thay đổi nhỏ, định danh các đối tượng thay đổi thì người dùng cần cập nhật lại các bước hành vi, thêm mới hoặc xóa hành vi không cần thiết. 3.2.3.4 Thiết kế cơ sở dữ liệu a) Phân tích Dựa vào các chức năng của bộ tạo/sửa hành động, cơ sở dữ liệu cần lưu trữ các thông tin về người dùng, website, phiên bản, hành động, bước hành động tương ứng là các thực thể của hệ thống. Các thực thể có các thuộc tính như sau: Người dùng: lưu trữ thông tin gồm username, mật khẩu, tình trạng hoạt động. Website: lưu trữ tên của website, người tạo, tình trạng hoạt động. Phiên bản: lưu trữ tên phiên bản, người tạo, có phải là phiển bản cuối hay không, tình trạng hoạt động. Hành động: lưu trữ tên hành động, người tạo, thứ tự hành động, ghi chú, website, phiên bản trực thuộc, tình trạng hoạt động. Bước hành động: lưu trữ tên bước hành động, thứ tự bước hành động, người tạo, hành động trực thuộc, các tham số, thời gian chờ, tình trạng hoạt động. Quan hệ giữa các thực thể Nguyễn Khắc Hưng Đại Học Công Nghệ 30
  35. Hình 3-4: Lược đồ quan hệ thực thể của phần tạo sửa hành động Hình vẽ trên biểu thị mối quan hệ giữa các thực thể. Mỗi website có thể có nhiều phiên bản. Mỗi phiên bản có một bộ n hành động, trọng mỗi hành động thì có nhiều bước hành động. b) Thiết kế Từ các phân tích về các thực thể và các liên kết thực thể nêu trên, có thể mô tả qua các lược đồ quan hệ sau: Lược đồ quan hệ User User (u_id, user_name, password, salt, permission, status): trong đó u_id là khóa chính, user_name là tên đăng nhập, password là mật khẩu đã băm, salt là chuỗi ngẫu nhiên để băm mật khẩu, permission là quyền người dùng, status là trạng thái của user. Lược đồ quan hệ Website Website(site_id, site_name, author, status): trong đó site_id là khóa chính, site_name là tên website, author là tên username tạo website, status là trạng thái của website Lược đồ quan hệ Version Version (ver_id, ver_name, website_id, is_latest, author, status): trong đó ver _id là khóa chính, ver_name là tên phiên bản, website_id là khóa ngoài xác định website trực thuộc, is_latest thể hiện có phải là phiên bản cuối hay không, author là tên username tạo website, status là trạng thái của phiên bản. Lược đồ quan hệ Action Action (act_id, act _name, author, a_index, version_id, note, status): trong đó act_id là khóa chính, act_name là tên hành động, author là tên username tạo website, a_idx là thứ tự hành động, version_id là khóa ngoài xác định phiên bản trực thuộc, status là trạng thái của hành động. Lược đồ quan hệ Step Nguyễn Khắc Hưng Đại Học Công Nghệ 31
  36. Step(st_id, st_name, s_idx, author, action_id, params, wait, status): trong đó st_id là khóa chính, st_name là tên website, s_idx là thứ tự bước hành động, author là tên username tạo website, action_id là khóa ngoài xác định hành động trực thuộc, params là các tham số, wait là thời gian chờ, status là trạng thái của website. 3.2.3.5 Thiết kế các API Các thành phần trong hệ thống giao tiếp với nhau thông qua Restful HTTP API. Bảng dưới đây mô tả các chức năng của các API đã được xây dựng: Phương URI Tham số Trả về Ghi chú thức access_token token_type username api/v1/oauth/login POST refresh_token Đăng nhập password expires_in user_name api/v1/oauth/logout POST access_token status Đăng xuất Trả về danh sách website api/v1/websites GET access_token websites_list của người dùng access_token, api/v1/website_add POST website_id Tạo website website_name access_token, api/v1/website_edit PUT website_id, status Sửa website new_name Trả về danh access_token, sách version api/v1/verions GET versions_list website_id trực thuộc website access_token, website_id, api/v1/version_add POST version_id Tạo version is_latest, version_name access_token, api/v1/version_edit PUT version_id, status Sửa version new_name Trả về danh access_token, sách action api/v1/actions GET actions_list version_id trực thuộc version Nguyễn Khắc Hưng Đại Học Công Nghệ 32
  37. access_token, action_name, api/v1/action_add POST a_index, action_id Tạo action version_id, note access_token, action_id version_id, api/v1/action_edit PUT status Sửa action action_name, a_index, note Trả về danh access_token, api/v1/steps GET steps_list sách step trực action_id thuộc action access_token, step_name, s_index, api/v1/step_add POST action_id Tạo step action_id, params, wait access_token, step_id step_name, api/v1/step_edit PUT s_index, status Sửa step action_id, params, wait Bảng 3-2: Danh sách các API module tạo sửa hành động mẫu 3.2.3.6 Một vài thuật toán. Các hàm thực thi các bước hành động Các hàm này được coi như là trái tim (core) của toàn bộ dự án, nếu không cài đặt đầy đủ các hàm mô phỏng thao tác người dùng thì cả quá trình đăng sản phẩm sẽ thất bại. Từ các hành động chung của việc đăng sản phẩm ở trên, tác giả đã xây dựng được tập hợp 36 hành động mẫu chia thành các nhóm thể hiện cho những hành động thường có của người dùng web. Các hàm hỗ trợ AutoIT Nguyễn Khắc Hưng Đại Học Công Nghệ 33
  38. STT Tên thủ tục Diễn giải Di chuyển chuột đến vị trí mới có tọa độ 1 MouseMovePos(x,y) (x,y) 2 MouseLeftClickPos(x,y) Bấm chuột trái tại vị trí có tọa độ (x,y) 3 MouseRightClickPos(x,y) Bấm chuột phải tại vị trí có tọa độ (x,y) Bấm chuột trái tại vị trí có tọa độ (x,y) 4 MouseScrollUp(x,y,n) xong cuộn lên n lần Bấm chuột trái tại vị trí có tọa độ (x,y) 5 MouseScrollDown(x,y,n) xong cuộn lên n lần 6 Wait (mls) Chờ trong mls mili giây Kéo chuột từ tọa độ (x1, y1) sang tọa độ 7 DragPosToPos(x1,y1,x2,y2) (x2,y2) 8 SendText(text) Nhập chuỗi là text 9 OpenApp(name) Mở app có tên name Sử dụng tổ hợp phím ví dụ ComboKey 10 ComboKey(param1) (Ctr+N) 11 OpenSite(sitename) Mở trang web có địa chỉ sitename Tạo thư mục có đường dẫn path ví dụ: 12 CreateFolder(path) CreateFolder(“D:/folder1”) Tạo tệp có đường dẫn path ví dụ: 13 CreateFile(fpath) CreateFile (“D:/1.txt”) 14 AutoIt_Send(text) Nhập chuỗi là text với AutoIT 15 SetWinActivate AutoIT chuyển tab window Bảng 3-3: Các hàm thủ tục mà hệ thống hỗ trợ gọi AutoIT Các hàm hỗ trợ Selenium STT Tên thủ tục Diễn giải 1 IWeb_Goto_URL(url) Selenium đi đến địa chỉ url 2 IWeb_Click_ById(ID) Selenium bấm vào đối tượng có id là ID 3 IWeb_Send_ById(text) Selenium nhập text vào hộp thoại có id là ID Selenium bấm vào đối tượng có name là 4 IWeb_Click_ByName Name Selenium nhập text vào hộp thoại có name là 5 IWeb_Send_ByName Name Selenium bấm vào đường dẫn có nội dung là 6 IWeb_Click_ByLinkText Text Selenium nhập text vào đường dẫn có nội 7 IWeb_Send_ByLinkText dung là Text Selenium bấm vào đối tượng có class_name 8 IWeb_Click_ByClassName là cName Nguyễn Khắc Hưng Đại Học Công Nghệ 34
  39. Selenium nhập text vào hộp thoại có 9 IWeb_Send_ByClassName class_name là cName Selenium bấm vào đối tượng theo đường dẫn 10 IWeb_Click_ByCssSelector CSS Selenium nhập text vào hộp thoại theo đường 11 IWeb_Send_ByCssSelector dẫn CSS Selenium bấm vào đối tượng theo đường dẫn 12 IWeb_Click_ByXpath Xpath Selenium nhập text vào hộp thoại theo đường 13 IWeb_Send_ByXpath dẫn Xpath 14 IWeb_SendHotKey Selenium nhập hot key 15 Chrome_Open Selenium mở trình duyệt Chromedriver 16 Chrome_Close Selenium đóng ChromeDriver Selenium tìm đối tượng theo 1 định danh 17 IWeb_FindElement riêng nào đó Selenium nhập text vào đối tượng đã tìm 18 IWeb_SendText thấy ở trên Selenium bấm vào đối tượng đã tìm thấy ở 19 IWeb_Click trên 20 IWeb_WaitElement Selenium chờ đối tượng thực thi Bảng 3-4: Các hàm thủ tục mà hệ thống hỗ trợ gọi Selenium Để cài đặt các hàm này, tác giả import từ các gói thư viện của Selenium, AutoIT sẵn có và tùy biến cách tham số đầu vào link động theo kịch bản mà người dùng nhập vào. Dưới đây là một ví dụ nhỏ về quá trình cài đặt. Hình 3-5: Import thư viện hỗ trợ AutoIT Nguyễn Khắc Hưng Đại Học Công Nghệ 35
  40. Hình 3-6: Cài đặt một hàm AutoIT với ngôn ngữ C# Ngoài các hàm được hỗ trợ sẵn từ các lớp và giao diện của Selenium và AutoIT, để giải quyết triệt để bài toán và hướng đến sự tiện lợi nhất cho người quản trị, đảm bảo người quản trị không cần vào vào từng đối tượng, chuột phải và xem nguồn trang thì tác giả đã cài đặt thêm một số phương thức sau đây: Phương thức hỗ trợ ghi lại hành động bàn phím, chuột. Chức năng này hỗ trợ người quản trị có thể record được các hành động tác động tới website. Ví dụ khi người dùng thực hiện hành động đăng nhập cần các bước sau: - Bước 1: truy cập trang login.sendo.vn =>hệ thống ghi nhận actions là Chrome Open > Iweb_Open_URL với tham số là login.sendo.vn - Bước 2: Tìm textbox có name là username => hệ thống ghi nhận action là Iweb_FindElement với tham số 1 là name (thuộc tính tìm kiếm) và tham số thứ 2 là username - Bước 3: Nhập liệu vào ô textbox giá trị là username => hệ thống ghi nhận action là Iweb_sendText với tham số hungnk (giá trị người dùng gõ vào) Nguyễn Khắc Hưng Đại Học Công Nghệ 36
  41. - Bước 4: Tìm textbox có name là password => hệ thống ghi nhận action là Iweb_FindElement với tham số 1 là name (thuộc tính tìm kiếm) và tham số thứ 2 là password - Bước 5: Nhập liệu vào ô textbox giá trị là password => hệ thống ghi nhận action là Iweb_sendText với tham số hungnk (giá trị người dùng gõ vào) - Bước 6: Nhấn nút Đăng nhập => hệ thống ghi nhận action là Iweb_FindElementByID tham số là btn_login và action Iweb_Click Để cài đặt chức năng này thì tác giả sử dụng các hook được cung cấp bởi window. Với ngôn ngữ C# thì được cài đặt trong gói WinHooksNET với 3 lớp phổ biến là MouseHook, KeyboardHook, HotKeysModule. Ba lớp này hỗ trợ hầu hết các hành động bàn phím, chuột của người dùng. Các phương thức điều kiện IF ELSE END Trong trường hợp có những đối tượng xuất hiện trên màn hình với tất suất bất định, ví dụ như popup quảng cáo có khi xuất hiện có khi không (phụ thuộc vào chiến dịch quảng cáo). Để phòng trừ trường trường hợp này, tác giả hỗ trợ xây dựng phương thức điều kiện hỗ trợ người dùng. Trong trường hợp sử dụng câu lệnh điều kiện thì người dùng phải tuân thủ một số luật về cú pháp như - Có câu lệnh IF bắt buộc phải có END - Có câu lệnh ELSE bắt buộc phải có IF trước nó và có END sau nó. - Hiện tại chưa áp dụng được các cấu trúc điều kiện lồng nhau (trong IF END có chứa IF END) Phương thức vòng lặp LOOP END BREAK Phương thức này hỗ trợ người dùng tìm kiếm những đối tượng ở tận cùng cuối ở danh sách thì người dùng sẽ cần phải làm các hành động lặp lại là sang trang mới => tìm kiếm => nếu thấy break. Các phương thức liên quan hình ảnh Trong lập trình giao diện web luôn có những đối tượng không thể tìm được bằng phương pháp css selector thông thường. Hoặc đôi khi phương pháp định danh chính xác cũng không thể dùng được (do thuộc tính ID, class thay đổi). Khi đó người quản trị có thể sử dụng tìm kiếm đối tượng bằng hình ảnh. Một ví dụ khá phổ biến đó là khi người dùng chọn đăng ảnh sản phẩm. Nếu đăng ảnh qua đường dẫn thì sẽ dễ dàng tuy nhiên nhiều trang chỉ cho chọn ảnh từ bộ sưu tập có Nguyễn Khắc Hưng Đại Học Công Nghệ 37
  42. sẵn hoặc từ máy tính cá nhân lên. Khi đó không thể tìm được đối tượng Open File của windowFileBrowser được mà chỉ có thể tìm qua hình ảnh. 3.2.4.1. Kiến trúc hệ thống Với bộ thực thi thì kiến trúc được tách biệt 3 tầng như bên dưới đây: Hình 3-7: Kiến trúc hệ thống phần tạo sửa hành động mẫu Tầng Executer: Là nơi nhận các lệnh điều khiển của Controller để gọi đến các hàm AutoIT hoặc selenium, Khi các lệnh thực thi sẽ trả về kết quả Pass (Đạt) hay Fail (Không đạt) của từng bước. Tầng Controller Tầng này sẽ liên tục hỏi phía Server rằng có yêu cầu đăng sản phẩm mới hay không. Nếu có yêu cầu mới thì sẽ đưa vào hàng đợi các yêu cầu để thực thi. Tầng server và dữ liệu Tầng này làm nhiệm vụ chờ yêu cầu đồng bộ từ phía người dùng cuối. Khi người dùng cuối nhấn nút đồng bộ một sản phẩm. Server sẽ kiểm tra sản phẩm đã Nguyễn Khắc Hưng Đại Học Công Nghệ 38
  43. được đồng bộ hay chưa. Nếu chưa được đồng bộ Server sẽ truy vấn dữ liệu về sản phẩm và tập các hành động mẫu của phiên bản mới nhất của sàn mục tiêu để tạo ra các hành động mới và bước hành động mới như lưu đồ bên dưới. Hình 3-8: Quy trình tạo hành động tác động lên sàn TMĐT 3.2.4.2 Biểu đồ Use case Hình 3-9: Lược đồ use case của phần thực thi tự động Trong trường hợp lý tưởng, người quản trị gần như không phải can thiệp gì mà hệ thống sẽ tự chạy tự động. Tuy nhiên trong trường hợp phát sinh lỗi, có thể do website cập nhật giao diện thì người quản trị có thể tạm dừng tiến trình chạy tự động, chỉnh sửa hành động mẫu nếu cần sau đó cho chương trình tiếp tục chạy. 3.2.4.3 Thiết kế cơ sở dữ liệu a) Phân tích Dựa vào yêu cầu chức năng của hệ thống, cơ sở dữ liệu cần lưu trữ thông tin của lượt đăng mới các hành động mới được nhân bản từ hành động mẫu kèm thông tin sản phẩm mới. Các thực thể này có các thuộc tính như sau: Nguyễn Khắc Hưng Đại Học Công Nghệ 39
  44. Thực thể lượt đăng: chứa thông tin về người đăng (end user), website, phiên bản, trạng thái lượt đăng. Thực thể hành động mới: chứa thông tin về lượt đăng, website, phiên bản, hành động mẫu, các bước hành động mới. Quan hệ giữa các thực thể Hình 3-10: Lược đồ thực thể quan hệ của phần tạo thực thi hành động Hình vẽ trên biểu thị mối quan hệ giữa các thực thể. Mỗi lượt đăng có thể có nhiều hành động mới. Mỗi hành động mới có một bộ nhiều bước hành động mới. b) Thiết kế Từ các phân tích về các thực thể và các liên kết thực thể nêu trên, có thể mô tả qua các lược đồ quan hệ sau: Lược đồ quan hệ SyncTime SyncTime (sync_id, sync_name, website_id, version_id,username, status): trong đó sync _id là khóa chính, sync_name là tên lượt đăng để gợi nhớ cho người quản trị, website_id là khóa ngoài xác định website trực thuộc, version_id là khóa ngoài xác định phiên bản hiện tại, username là tên username tạo website, status là trạng thái của phiên bản (actived, deactived). Lược đồ quan hệ NewAction NewAction (act_id, act _name, username, a_index, version_id, note, steps, status): trong đó act_id là khóa chính, act_name là tên hành động, username là tên người dùng yêu cầu đồng bộ, a_idx là thứ tự hành động, version_id là khóa ngoài xác định phiên bản trực thuộc, steps là thông tin chi tiết các bước hành động mới, status là trạng thái của hành động (actived, deactived). Nguyễn Khắc Hưng Đại Học Công Nghệ 40
  45. 3.2.4.4 Thiết kế các API Bảng dưới đây mô tả các chức năng của các API đã được xây dựng cho mô đun thực thi hành động tự động: Phương URI Tham số Trả về Ghi chú thức api/v1/sync_ Trả về danh sách các yêu GET - requests_list requests cầu đồng bộ mới api/v1/new_a new_actions_ Trả về danh sách hành động GET request_id ctions list mới Thông báo việc thực thi request_id, api/v1/issue_ hành động có lỗi tới server POST action_id, report để sau này có thể kiểm tra step_index lại Bảng 3-5: Danh sách các API module thực thi hành động. 3.2.5.1. Kiến trúc hệ thống Hệ thống được xây dựng với kiến trúc 3 tầng như sau Hình 3-11: Sơ đồ khối module web dành cho người dùng Nguyễn Khắc Hưng Đại Học Công Nghệ 41
  46. Tầng client: Là nơi hiển thị các giao diện với người dùng, Tầng ứng dụng Đây là nơi server sẽ thực hiện các bước xử lý thông tin như xử lý dữ liệu thô, cài đặt các hàm mã hóa, giải mã, băm mật khẩu để đảm bảo tính bảo mật của dữ liệu. Tầng ứng dụng được cài đặt bằng ngôn ngữ PHP sử dụng framwork codeigniter, triển khai trên máy chủ Apache. Tầng dữ liệu Đây là nơi lưu trữ và thao tác truy vấn, quản lý cơ sở dữ liệu, tầng này được cài đặt dựa trên DB_Buider có sẵn của Codeigniter giúp cho việc triển khai các câu truy vấn được rành mạch, linh động. 3.2.5.2 Biểu đồ Use case Sơ đồ khối hoạt động của hệ thống có thể được mô tả như sau: Nguyễn Khắc Hưng Đại Học Công Nghệ 42
  47. Hình 3-12: Biểu đồ Usecase của người dùng cuối Để người dùng đăng đồng thời sản phẩm lên các sàn thì cần thực hiện theo quy trình sau: Hình 3-13: Quy trình đăng sản phẩm đồng bộ Xác thực và quản lý profile Các kịch bản tương tự như thực hiện với các trang yêu cầu tài khoản, cũng có các usecase cơ bản như đăng ký, đăng nhập, thay đổi thông tin và đăng xuất. Cài đặt tài khoản Đây là việc đầu tiên người dùng phải làm khi muốn đồng bộ sản phẩm, tài khoản này là tài khoản bình thường người dùng vẫn hay đăng nhập vào các sàn TMĐT như Tiki, Sendo, shopee Với nhiều người dùng thì họ luôn để tài khoản ở các sàn là giống nhau cả về tên đăng nhập và mật khẩu. Tuy nhiên vẫn có một số người để các tên đăng nhập khác nhau vì tên tài khoản khi đăng ký đã có người khác sử dụng hoặc sử dụng mật khẩu khác nhau vì muốn nâng cao bảo mật (tránh trường hợp lộ tài khoản một sàn thì mất luôn tài khoản ở các sàn còn lại). Vì vậy hệ thống để mặc định là mỗi trang có một form để quản lý tài khoản. Ngoài ra thông tin tài khoản của người dùng được mã hóa trước khi gửi lên server và được mã hóa 2 chiều thêm một lần nữa trước khi lưu vào cơ sở dữ liệu. Cài đặt danh mục. Nguyễn Khắc Hưng Đại Học Công Nghệ 43
  48. Có một khó khăn rất lớn khi đồng bộ các sản phẩm là việc khác nhau trong vấn đề xử lý form, đặc biệt mỗi sàn lại phân chia danh mục theo cấu trúc cha con khác nhau. Vì vậy để sản phẩm được đăng thành công thì người dùng sẽ được cung cấp một giao diện đễ ghép cặp các danh mục của các sàn. Và việc này cũng phải được cấu hình trước khi đồng bộ sản phẩm. Nhập sản phẩm mẫu Có 2 cách nhập chính cho người dùng: - Nếu sản phẩm chưa đăng lên sàn nào thì người dùng sẽ phải nhập các trường như khi đăng lên từng sàn. Do số lượng các trường của các sàn là khác nhau nên một số sàn có những trường mà các sàn khác lại không có. Hệ thống sẽ đưa ra phần nhập liệu của tất các trường và sẽ yêu cầu bắt buộc nhập với những trường cần thiết mà nếu thiếu trường đó sản phẩm không thể đăng thành công được. - Nếu sản phẩm đã có trên sàn nào đó rồi thì hệ thống cung cấp trình tiện ích mở rộng (cho trình duyệt chrome) để người dùng chỉ cần ấn 1 nút là sản phẩm sẽ được gửi thông tin về cho hệ thống. Chức năng này rất hữu ích khi người dùng đã bán hàng lâu năm trên một sàn nào đó mà có số lượng sản phẩm đang bán lớn. Hỗ trợ giảm thao tác nhập liệu cho người dùng. Chọn sàn cần đồng bộ Mỗi sàn lại có chính sách với người bán khác nhau, chính sách chiết khấu khác nhau tại mỗi thời điểm nên có những thời điểm người bán hàng chỉ muốn tập trung bán hàng trên một vài sàn nào đó mà không phải là tất cả. Việc chọn này sẽ giúp tối ưu lợi nhuận cho người bán hàng. Nhấn nút đồng bộ Tại mỗi sản phẩm sẽ có một nút đồng bộ riêng hoặc người dùng có thể chọn một danh sách các sản phẩm rồi đồng bộ hàng loạt Xem kết quả cập nhật Sau khi đồng bộ thành công hệ thống có cập nhật trạng thái của sản phẩm tại mỗi sàn, người dùng có thể ấn vào link mới để xem thông tin hiển thị trên sàn Nguyễn Khắc Hưng Đại Học Công Nghệ 44
  49. 3.2.5.3 Thiết kế cơ sở dữ liệu a) Phân tích Dựa vào các chức năng của bộ tạo/sửa hành động, cơ sở dữ liệu cần lưu trữ các thông tin về người dùng cuối, tài khoản của người dùng ở các sàn, website, danh mục sản phẩm, thông tin sản phẩm, cài đặt đặc biệt tương ứng là các thực thể của hệ thống. Các thực thể có các thuộc tính như sau: Người dùng: lưu trữ thông tin gồm username, mật khẩu, tình trạng hoạt động. Website: lưu trữ tên của website, người tạo, tình trạng hoạt động. Tài khoản ở các sàn: lưu trữ tên người tạo, website, tên người dùng, mật khẩu đã mã hóa, bản trực thuộc, tình trạng hoạt động. Sản phẩm: lưu trữ tên sản phẩm, mã sản phẩm, đường dẫn ảnh, giá gốc, giá giảm, ngày giảm giá, danh mục, loại sản phẩm, đơn vị, mầu sắc, họa tiết, cỡ, khối lượng, lượng tồn kho, mã sku, mô tả sản phẩm, chi tiết sản phẩm, các sàn đã đăng, thời gian đăng, tình trạng hoạt động. Cài đặt: lưu trữ thông tin người dùng, thuộc tính cài đặt, giá trị cài đặt Quan hệ giữa các thực thể Hình 3-14: Lược đồ quan hệ thực thể của phần web quản lý Nguyễn Khắc Hưng Đại Học Công Nghệ 45
  50. Hình vẽ trên biểu thị mối quan hệ giữa các thực thể. Mỗi người dùng có thể có nhiều nhiều sản phẩm. Mỗi người dùng có một tài khoản trên mỗi sàn. Có thể đăng nhiều sản phẩm trên nhiều sàn. Mỗi sản phẩm chỉ có duy nhất một danh mục đích cuối. b) Thiết kế Từ các phân tích về các thực thể và các liên kết thực thể nêu trên, có thể mô tả qua các lược đồ quan hệ sau: Lược đồ quan hệ User: đã mô tả ở phần 3.2.3.4 Lược đồ quan hệ Website: đã mô tả ở phần 3.2.3.4 Lược đồ quan hệ Account Account (acc_id, user_name, upassword, website_id, status): trong đó u_id là khóa chính, user_name là tên đăng nhập, upassword là mật khẩu đã được mã hóa, website_id là khóa ngoài xác định website muốn đồng bộ, status là trạng thái của website (actived, deactived) Lược đồ quan hệ Category Category (cate_id, user_name, website1_id, website1_cate, website2_id, website2_cate, status): trong đó cate_id là khóa chính, user_name là người dùng, website1_id và website2_id là khóa định danh của các sàn, website1_cate và website2_cate là chi tiết các, status là trạng thái của website (actived, deactived) Lược đồ quan hệ Product Product (p_id, p_name, p_code, base_price, discount_price, category, p_type, don_vi, color, key_words, hoa_tiet, co_mu, ton_kho, sku, description, attributes, upload_time, status): trong đó p_id là khóa chính, p_name là tên sản phẩm, p_code là mã sản phẩm, base_price là giá gốc, discount_price là giá khuyến mại, category là danh mục sản phẩm, p_type là loại sản phẩm, don_vi là đơn vị tính, color là màu sắc sản phẩm, key_words là từ khóa để seo sản phẩm, hoa_tiet là họa tiết nếu có, co_mu là có mũ, ton_kho là lượng tồn kho, sku là mã SKU, description mô tả sản phẩm, attributes là thuộc tính sản phẩm, upload_time là thời gian người dùng tạo sản phẩm, status là trạng thái của website (actived, deactived) Lược đồ quan hệ Setting Setting (set_id, user_name, setting_key, setting_value): trong đó set_id là khóa chính, user_name là người dùng, setting_key là key cài đặt, setting_value là giá trị cài đặt. Nguyễn Khắc Hưng Đại Học Công Nghệ 46
  51. 3.2.5.4 Thiết kế các API Bảng dưới đây mô tả các chức năng của các API đã được xây dựng cho mô đun trang quản lý Phương URI Tham số Trả về Ghi chú thức access_token token_type username api/v1/oauth/login POST refresh_token Đăng nhập password expires_in user_name api/v1/oauth/logout POST access_token status Đăng xuất Trả về danh sách website api/v1/websites GET access_token websites_list của người dùng Trả về danh sách các cấu api/v1/categories GET access_token, categories_list hình danh mục của người dùng access_token, website1_id, Sửa thông api/v1/category_edit PUT website1_name, status tin cấu hình website2_id, danh mục website2_name Trả về danh sách tài api/v1/accounts GET access_token accounts_list khoản người dùng ở các website access_token, Sửa thông website_id, tin tài khoản api/v1/account_edit PUT status user_name, của user tại password sàn Trả về danh sách các cấu api/v1/settings GET access_token settings_list hình của người dùng access_token, Sửa cấu hình api/v1/setting_edit PUT setting_key, status cài đặt của setting_value người dùng Nguyễn Khắc Hưng Đại Học Công Nghệ 47
  52. Trả về danh sách sản api/v1/products GET access_token, products_list phẩm của người dùng access_token, p_name, p_code, base_price, discount_price, category, p_type, Tạo sản api/v1/product_add POST don_vi, color, product_id phẩm mới key_words, hoa_tiet, co_mu, ton_kho, sku, description, attributes access_token, product_id, p_name, p_code, base_price, discount_price, category, p_type, Sửa thông api/v1/product_edit PUT status don_vi, color, tin sản phẩm key_words, hoa_tiet, co_mu, ton_kho, sku, description, attributes access_token, Xóa sản api/v1/product_delete POST status product_id phẩm access_token, Đồng bộ sản api/v1/product_sync POST product_id, status phẩm website_id Bảng 3-6: Danh sách các API module web quản trị 3.2.5.5 Một vài thuật toán Mã hóa một chiều mật khẩu với salt Khi lưu trữ password vào CSDL thường sẽ sử dụng các hàm băm khác nhau được hỗ trợ bởi hệ CSDL hoặc ngôn ngữ lập trình (như MD5) để tạo dữ liệu mã hóa, dữ liệu mã hóa đó được lưu vào CSDL. Ví dụ: $raw_password = 'abc123'; Nguyễn Khắc Hưng Đại Học Công Nghệ 48
  53. $crypt = md5($raw_password); //e99a18c428cb38d5f260853678922e03 Bởi vì hàm băm tạo ra các giá trị không thể dịch ngược chỉ duy nhất một cách là thử. Nếu sử dụng các mật khẩu yếu, nó có thể bị dò ra dựa trên giá trị băm của các mật khẩu phổ biến biết trước. Như trường hợp trên khi thấy e99a18c428cb38d5f260853678922e03 thì đoán được password là abc123. Để khắc phục điều này có thể sử dụng đến salt. Sử dụng Salt tăng cường an toàn cho mật khẩu. Để phức tạp hóa mật khẩu lưu trữ, thì các mật khẩu gốc trước khi mã hóa được nối thêm các chuỗi, các chuỗi thêm này gọi là salt. $crypt = md5($raw_password.$salt); Giờ mật khẩu lưu trữ ở trên phức tạp hơn rất nhiều. Biết được $crypt đoán ra $raw_password là rất khó, kể cả khi là password yếu. Khó mà xây dựng được một từ điển chứa các mã hóa tương ứng với password. Mã hóa hai chiều mật khẩu với mã hóa Cesar Với mật khẩu của người dùng tại các trang TMĐT, nếu hệ thống chỉ lưu ở dạng chuỗi nguyên bản sẽ rất rủi ro về bảo mật. Khó ai có thể đưa mật khẩu để hệ thông lưu trữ mà không có hàm mã hóa nào cả. Tác giả xây dựng hàm mã hóa dựa trên thuật toán mã hóa Cesar như sau: function encrypt($string) { $loop = rand(1, 10); // lấy ngẫu nhiên 1 số từ 1 đến 10 $res = ""; for ($i = 0; $i Encipher($string, $num); // mã hóa cesar chuỗi đầu với số ngẫu nhiên, nối kí tự vào đầu } $loop_char = chr($loop+96); return $loop_char.$res; // Nối kí tự tương đương loop vào đầu } Với hàm giải mã thì làm ngược lại thuật toán trên Nguyễn Khắc Hưng Đại Học Công Nghệ 49
  54. Về độ an toàn thì thuật toán không an toàn tuyệt đối nhưng cũng tránh hiển thị mật khẩu tại các giao diện. 3.3. Xây dựng các giao diện Giao diện trang thống kê Giao diện này để giúp cho người sử dụng nắm bắt được các thông tin - Số lượng sản phẩm đã đăng lên các sàn - Thống kê được lượt đăng sản phẩm theo tháng, quý, năm - Thống kê sản phẩm theo danh mục Hình 3-15: Giao diện trang thống kê Giao diện trang danh sách sản phẩm Đây là giao diện quản trị rất phổ biến bao gồm: - Hiển thị danh sách các sản phẩm - Có 1 đường dẫn (Nút chọn) để tạo sản phẩm mới - Mỗi sản phẩm lại có thêm đường dẫn để sửa hoặc xóa sản phẩm - Mỗi sản phẩm có 1 danh sách các sàn mà người dùng đang bán hàng, khi bấm vào tên mỗi sàn thì sẽ bật hoặc tắt chức năng đồng bộ sản phẩm lên sàn đó Nguyễn Khắc Hưng Đại Học Công Nghệ 50
  55. Hình 3-16: Giao diện trang danh sách sản phẩm Giao diện thêm sản phẩm Tại đây người dùng có thể nhập các thông tin về sản phẩm Hình 3-17: Giao diện hộp thoại thêm sản phẩm mới Nguyễn Khắc Hưng Đại Học Công Nghệ 51
  56. Giao diện quản lý tài khoản Tại đây người dùng sẽ nhập tên đăng nhập và tài khoản cho các sàn thương mại điện tử, trong trường hợp người dùng không muốn bán hàng trên 1 sàn nào đó thì có thể chọn tắt tài khoản trên sàn đó đi. Hình 3-18: Giao diện trang quản lý tài khoản Mật khẩu của người dùng được mã hóa và lưu trữ trên server. Hàm mã hóa là hàm được cài đặt theo thuật toán mã hóa Cesar. Giao diện quản lý danh mục Danh mục có các chức năng cơ bản như thêm, sửa xóa danh mục. Một danh mục bao gồm một định danh chính (không trùng lặp) và các giá trị danh mục tại mỗi sàn. Ví dụ một danh mục chung cho 3 sàn Tiki, Sendo, Shopee là Áo nam thì định danh trên các sàn cụ thể như sau: - Tiki: Thời Trang > Thời trang nam > Trang phục nam > Áo khoác nam - Shopee: Thời Trang Nam > Áo khoác & Áo vest > Áo khoác phao Nguyễn Khắc Hưng Đại Học Công Nghệ 52
  57. - Sendo: Thời trang nam > Áo khoác nam > Áo khoác phao nam Nếu 1 sản phẩm chưa có giá trị danh mục trên sàn nào thì sản phẩm đó cũng không thể được đồng bộ lên sàn đó. Vì vậy quá trình ghép cặp giữa các danh mục giữa các sàn phải được cập nhật thường xuyên bởi người quản trị. Hình 3-19: Giao diện trang quản lý danh mục Giao diện cài đặt khác Mục đích chính của trang này là quản lý các cài đặt mặc định của người dùng như: - Giá trị mặc định của một sản phẩm: có những cửa hàng luôn nhập một số lượng nhất định hàng hóa, khi giá trị này được cài đặt thì họ sẽ không cần nhập giá trị này ở ô đăng sản phẩm nữa - Thời điểm bán hàng trên một sàn nào đó. Khi cài đặt giá trị này thì chỉ trong thời gian cài đặt sản phẩm mới được đồng bộ nên sàn này, ngược lại chức năng đồng bộ bị tắt bỏ. Nguyễn Khắc Hưng Đại Học Công Nghệ 53
  58. Hình 3-20: Giao diện trang giá trị mặc định Giao diện danh sách các hành động mẫu Giao diện này là vô hình với người dùng cuối nhưng lại vô cùng quan trọng với người quản trị hệ thống. Tại giao diện này người quản trị có thể chạy thử một vài hành đồng để kiểm tra các hành động có được thực hiện đúng không, nếu chưa đúng thì có chỉnh sửa trực tiếp tại giao diện này. Các thông tin chính gồm có - Website: là tên của sàn TMĐT mà hành động thực hiện - Version: là tên phiên bản của tập các hành động - Danh sách các hành động - Chi tiết các bước của hành động hình Toàn bộ các dữ liệu này đượu lưu trữ tại server thông qua việc trao đổi dữ giữa sử dụng các API. Nguyễn Khắc Hưng Đại Học Công Nghệ 54
  59. Hình 3-21: Giao diện ứng dụng các hành động mẫu Giao diện trang chi tiết hành động Mỗi hành động sẽ gồm nhiều bước, mỗi đơn vị bước nhỏ nhất sẽ là một hàm gọi AutoIT hoặc Selenium Hình 3-22: Giao diện ứng dụng từng bước của hành động Nguyễn Khắc Hưng Đại Học Công Nghệ 55
  60. Ví dụ như trên là bộ hành động set thuộc tính, Với mỗi sản phẩm sẽ có những thuộc tính như Đơn vị là cái, chiếc hay bộ, khối lượng của sản phẩm. Với 3 bước thực tế của người dùng thì sẽ sinh ra 10 bước thao tác bằng Selenium hoặc AutoIT. Giao diện khi người dùng cuối đồng bộ sản phẩm Hình 3-23: Giao diện ứng dụng khi chạy thêm sản phẩm 3.4. Cài đặt và thử nghiệm Phần cứng Yêu cầu về máy chủ: - Ram: 16GB - Bộ nhớ trong: 1TB - CPU 24 core - Tốc độ mạng 100MHz Phần mềm - Máy tính cài hệ điều hành Window server 2012 - Apache 2.4.41 Nguyễn Khắc Hưng Đại Học Công Nghệ 56
  61. - MariaDB 10.4.8 - PHP 7.3.10 - phpMyAdmin 4.9.1 - Dotnet framework 4.0 - AutoIT 3.0 - Selenium Web Driver - Chromedriver Mặc dù tính khả thi của việc giải quyết bài toán đã được chứng mình, nhưng do đặc thù của mỗi sàn thương mại điện tử khác nhau nên quá trình tạo script cho mỗi sang lại có những vẫn đề khác nhau như: Lazada.vn: trang này có rất nhiều biện pháp để chống spam sản phẩm lên trang, ví dụ như nhận dạng được trình duyệt là trình tự động hoặc hành động nhập dữ liệu là của autobot. Khi đó trang lazada sẽ khóa chức năng đăng nhập và yêu cầu người dùng kéo trượt để mở khóa. Giải pháp đề ra là không dùng selenium mà AutoIT để giả lập y hệt thao tác của người dùng Shopee.vn: Trang này cũng nhận dạng được trình duyệt tự động giống như Lazada nên giải pháp đặt ra là sử dụng AutoIT để giả lập thao tác người dùng. Tiki.vn: Form nhập của tiki.vn nhập thông tin sản phẩm theo kiểu wizard setup, tức là toàn bộ quá trình nhập thông tin sản phẩm được chia thành nhiều bước và mỗi bước là 1 màn hình. Vậy nên các hành động sẽ phức tạp hơn so với các trang nhập thông tin đơn. Sendo.vn: Tác giả không gặp khó khăn gì trong việc sử dụng Selenium để điều khiển. Vatgia.com: Trang này rất đơn giản, số lượng trường nhập cũng ít nên không gặp khó khăn gì. 3.5. Kết quả Các sàn đã được đồng bộ với nhau theo yêu cầu của bài toàn ban đầu đề ra Nguyễn Khắc Hưng Đại Học Công Nghệ 57
  62. Thời gian đăng sản phẩm lên Tiki là 2 phút 1 sản phẩm, lên Shopee là 1 phút 50 giây, với Vật giá là 1 phút. Với lazada là 3 phút. 3.6. Định hướng phát triển trong tương lai Hiện tại admin đang thống kê số lượng người dùng, số lượng sản phẩm của hệ thống bằng việc lọc cơ sở dữ liệu. Việc làm này tốn khá nhiều thao tác và yêu cầu người quản trị phải có 1 chút kiến thức về truy vấn cơ sở dữ liệu. Vậy nên thời gian tới tác giả dự định sẽ xây dựng 1 trang quản trị nhỏ giúp cho người quản trị hệ thống thông kê được dễ dàng hơn. Hiện tại hệ thống mới chỉ hỗ trợ đăng sản phẩm lên các sàn. Vì các thao tác được thực hiện như người dùng thật nên gần như không có giới hạn các thao tác. Tác giả dự kiến sẽ hỗ trợ 1 số thao tác khác như: - Sửa thông tin sản phẩm trên sàn - Xóa bỏ sản phẩm. Sau khi xây dựng mô hình mẫu của hệ thống và đã chứng minh được tính khả của hệ thống thì tác giả thấy hệ thống đang có 1 vấn đề khá lớn đó là hiệu năng của hệ thống rất chậm do việc thực hiện thao tác giả lập người dùng là tuần tự. Để giải quyết vấn đề này có 2 giải pháp được đề xuất đó là: - Thực hiện các thao tác theo mô hình đa luồng, tức là có nhiều hơn 1 luồng thực hiện thao tác trong 1 thời điểm. Giải pháp này rất hay nhưng không thực hiện được do trình quản lý thao tác sử dụng cả AutoIT và Selenium, khi sử dụng AutoIT thì trình điều khiển chiếm chuột để theo tác. Nếu có hơn 1 trình yêu cầu sử dụng chuột tại một thời điểm sẽ xảy ra xung đột và gây ra việc thực hiện các thao tác sai. - Phát triển hệ thống theo mô hình phân tán, trong đó 1 máy chủ chịu trách nhiệm master sẽ xử lý thông tin để đưa ra các tập thao tác (lưu trữ dưới dạng mã Nguyễn Khắc Hưng Đại Học Công Nghệ 58
  63. kịch bản) sau đó chuyển đi cho các máy chủ Slave thực hiện như hình bên dưới. Phương pháp này giải quyết triệt để được vấn đề về hiệu năng nhưng cần cân nhắc vấn đề về chi phí, hiệu quả. Ngoài ra Server Farm còn giải quyết được một vấn đề lớn nữa đó là các trang chặn nếu gửi quá nhiều request từ 1 địa chỉ IP. Một số trang web ngày này sẽ thiết lập các chính sách để tránh việc bị bot (máy tự động) tấn công. Phương pháp khá phổ biển là lọc địa chỉ nguồn, nếu thấy từ một địa chỉ nguồn gửi đến quá nhiều request (yêu cầu) thì máy chủ có thể từ chối phục vụ. Hình 3-24: Mô hình Server Farm Nguyễn Khắc Hưng Đại Học Công Nghệ 59
  64. CHƯƠNG 4. KẾT LUẬN Tự động hóa quá trình làm việc để giảm thời gian và công sức luôn là yêu cầu cần thiết trong cuộc sống. Với sự phát triển mạnh mẽ của Thương mại điện tử, việc đăng một sàn phẩm lên nhiều sàn TMĐT là điều rất phổ biến. Đã có một vài giải pháp được đưa ra để giải quyết bài toán nhưng chưa có lời giải nào hoàn thiện. Ví dụ như sử dụng API để truyền thông tin sản phẩm lên các sàn TMĐT. Tuy nhiên, API thì dễ gặp phải những vấn đề về phiên bản và không khả thi cho người quản trị hệ thống chưa có kỹ năng về lập trình Luận văn tốt nghiệp đã trình bày chi tiết, cụ thể về một cách tiếp cận khác để giải quyết bài toán. Bằng việc tự động giả lập hành vi của người dùng cuối các sàn TMĐT nếu không sử dụng capcha hoặc mật khẩu nhiều lớp thì sẽ khó mà ngăn cản được việc đăng sản phẩm tự động. Từ thực nghiệm ta cũng thu được một số kết quả được tổng kết như sau:  Đưa ra tình hình thương mại điện tử trên thế giới nói chung và Việt Nam nói riêng.  Giới thiệu các nền tảng công nghệ hỗ trợ thực thi tác vụ tự động cụ thể là AutoIT hỗ trợ tự động hóa các thao tác GUI và thao tác người dùng còn Selenium và một số API WebDriver để tương tác với web  Giới thiệu chi tiết về yêu cầu bài toán, hướng giải quyết bài toán, mô hình triển khai và các kết quả thử nghiệm đạt được. Tuy nhiên, do thời gian có hạn cộng thêm khối lượng công việc lớn nên vẫn còn một số vấn đề và ý tưởng mà luận văn chưa thực hiện được. Nhằm cải thiện khả năng hoạt động của chương trình tới đây tác giả sẽ xây dựng thêm một số chức năng:  Xây dựng trang quản trị cho người quản trị hệ thống.  Mở rộng bộ các hành động mẫu, hỗ trợ người dùng không chỉ đăng sản phẩm mà còn có thể cập nhật thông tin, xóa sản phẩm hoặc quảng bá sản phẩm.  Phát triển mô hình Server farm để tăng hiệu năng của hệ thống. Nguyễn Khắc Hưng Đại Học Công Nghệ 60
  65. TÀI LIỆU THAM KHẢO Tiếng Anh [1] “Electronic commerce”. WTO. [Online]. Available: [2] “Glossary:E-commerce”. Euro Commission. [Online]. Available: commerce [3] “Statista” [Online]. Available: sales/ [5] Forbes, “Jeff-bezos” [Online]. Available: [8] “Chinanationalnews” [Online]. Available: alibaba-pushed-back-by-a-week [13] “AutoIT Script” [Online]. Available: [14] “Selenium Dev” [Online]. Available: project_and_tools/ Nguyễn Khắc Hưng Đại Học Công Nghệ 61
  66. Tiếng Việt [4] Báo điện tử VTV News (2018), “Sau Apple, Amazon trở thành công ty 1.000 tỷ USD” 20180905065615627.htm [6] vnexpress.net, (2019) "Những tỷ phú giàu nhất Trung Quốc" 3995408.html [7] cafef, (2016) "5 điều cần biết về vũ khí giúp Jack Ma trở thành người giàu nhất châu Á" giau-nhat-chau-a-20160428095802384.chn [9] Đầu tư chứng khoán, (2016) “Bài học cho startup Việt nhìn từ startup lớn nhất Đông Nam Á” startup-lon-nhat-dong-nam-a-163464.html [10] than-phien-post928967.html [11] chien-luoc-gi-post783474.html [12] 20180319130347365.htm Nguyễn Khắc Hưng Đại Học Công Nghệ 62