07/09/2018, 15:53

Làm nhiều hơn việc acceptance test với Capybara và Rspec.

TL;DR Cần thu thập thông tin của các đối tượng search theo keyword trên google => Viết script trên frameword Capybara để làm tự động, thay vì làm bằng tay. Background Như các bạn đã biết (cũng như dành cho các bạn chưa biết :D), đã code là phải có test, mà đã web là phải có acceptance. ...

TL;DR

Cần thu thập thông tin của các đối tượng search theo keyword trên google => Viết script trên frameword Capybara để làm tự động, thay vì làm bằng tay.

Background

Như các bạn đã biết (cũng như dành cho các bạn chưa biết :D), đã code là phải có test, mà đã web là phải có acceptance.
Nếu làm việc với Rails thì chắc hẳn các bạn ko xa lạ gì với Rspec và Capybara.
Trong đó, Capybara là Acceptance test framework for web applications, dạng mô phỏng thao tác của người dùng cuối như click chuột, chọn link nọ, điền data vào form trên UI, submit ...

Ngữ cảnh

Mình đang phát triển 1 dịch vụ cho công ty, sắp tới sẽ được public ra ngoài.
Dịch vụ thì cũng đơn giản thôi, chỉ là giúp mấy anh sales man quản lý khách hàng và sổ sách của mình. Nói như vậy để hiểu là khách hàng mà dịch vụ nhắm tới là các công ty có bộ phận sales, có sales man, hay là các công ty có bán lẻ.
Và trong các cách giới thiệu sản phẩm tới các đối tượng khách hàng này, có 1 cách gọi là DM (mình chẳng biết là gì, chỉ thấy anh Boss bảo thế). Nó là cách mà gửi hẳn thư giấy tới địa chỉ khách hàng đó, trong thư giới thiệu về dịch vụ của mình.

Sau khoảng nửa ngày anh Boss loay hoay với cách thủ công là search google với 1 số keyword nhất định, vào homepage của khách hàng đó, copy địa chỉ công ty, tên cty ra file xls, sau đó đem in, nhét phong bì và gửi. Thì anh Boss có ra chỗ mình, kêu vất vả quá mày ạ, mày nghĩ cách nào làm nhanh cho tao :)))))

Sau 1 hồi hỏi chuyện, chỉ trỏ, thì anh Boss đưa ra 1 số keyword cố định, và cần địa chỉ công ty của các đối tượng search được bằng keyword này, càng nhiều càng tốt.

Mình nghĩ đến trò dùng các crawler có sẵn rồi, nhưng vẫn ko khoái. 1 phần vì phải tìm hiểu, cài đặt, code code, phần lại muốn nghịch ngợm cái gì mới hơn từ những cái thân quen, nên mình quyết định dùng Rails + Rspec + Capybara cho task này.
(Nhắc tới Rails + Rspec + Capybara cho có vẻ nguy hiểm thôi, chứ thực ra mình viết ngay trên branch mới của project đang có, đỡ phải cài đặt gì, cho nhanh :D)

Tóm lại:

  • Input: 1 tập keywords
  • Output: Info extract được từ những keywords trên. Target là địa chỉ.

Như đã nói từ đầu, mình viết task này như việc viết 1 acceptance test mới, với kịch bản như sau:

  1. Open google search url với param là keyword ở trên. Ví dụ Link
  2. Thực hiện click vào từng link để dẫn tới trang chi tiết, tìm tới mục thông tin về cty (thường là About)
  3. Parse text có trong page, bắt đầu với một số từ khoá, hay với 1 số element của DOM. Ở đây mình chọn tag table, vì mục About phổ biến tag này để hiển thị thông tin.
  4. Lưu text parse được ở bước 3 vào file CSV hoặc XLS.

Sau đó trước khi ra về mình vứt máy đấy cho nó chạy, sáng mai đến lụm kết quả rồi báo cáo thôi :D

Các này ko bảo đảm 100% là chính xác được (máy mà), nhưng cực kỳ áp đảo về số lượng. Sau đó anh Boss cũng filter 1 lần nữa, nhưng bớt nhọc hơn.

Bạn có tips hay tricks nào hay trong công việc hằng ngày thì chia sẻ cho mình biết với, kẻo (mình) suốt ngày CURD mãi cũng chán :D

0