Đoạn script auto translate nho nhỏ viết bằng js và puppeteer

Nay mình gặp trường hợp translate hơn 7000 dòng text format dạng

msgid “Đi”
msgstr “”

Thành

msgid “Đi”
msgstr “Go”

Mình nghĩ trong đầu liền 3 giải pháp.

  1. Gọi api google (cách này có phí suy ra bỏ qua)

  2. Bật F12, thử translate 1 từ bất kì, xem google gọi api gì. Nếu gọi mình xem cái request đó ở tab network và copy lấy mã code CURL. Sau đó đem mã code CURL này sài lại sửa query string q thành từ mình muốn. (Cách này tưởng đơn giản nhưng fail vì google khi search 1 từ bất kì nó gọi 2 api, 1 api trả về request id, 1 api mới thực sự search. Suy ra bỏ qua cách này)

  3. Giả lập một cái trình duyệt rồi mở trang http://translate.google.com/ và liên tục typing cái từ mình muốn dịch. Dịch xong thì copy kết quả và lưu xuống (Mình chọn cách này).

Cuối cùng cách 3 là cách mình chọn, ngôn ngữ mà mình chọn đó là nodejs (Vì sao: vì viết script bằng js chạy trên env nodejs thì siêu nhanh + dễ). Web driver thì đương nhiên là puppeteer rồi (tham khảo: https://github.com/puppeteer/puppeteer)

À mà link đoạn code mình viết đây anh em nhé: https://gist.github.com/anhdiepmmk/57b02246684460932b12b8cd6f60389f/

Video demo chạy

2 Likes

Xài liên tục nhỡ đâu Google chặn và bắt giải reCaptcha thì sao nhỉ :thinking: ? Có một trường hợp cũng dùng cách của bạn và đã dính reCaptcha

4 Likes

Một câu chuyện tưởng tượng có liên quan… :slightly_smiling_face:

Tool devs: Mình cần dịch đống text này, làm sao nhỉ :slightly_smiling_face:? À đúng rồi, qua xem thử API của Google dịch xem sao :grinning:

Sau khi xem một số thông tin về Cloud Translation (API của Google dịch) của Google…

Google (nhân vật tưởng tượng): Sau này làm ăn bươm trải, chỉ có làm thì mới có ăn… Ta đã tốn một mớ công sức dùng Machine learning các thứ để tạo ra Google dịch rồi, giờ trả tiền bù vốn đi bạn ey.

Tool devs: Đ* má nó chứ, bắt người ta trả tiền à, đã thế còn phải dùng thẻ quốc tế nữa chứ. Đúng rồi, sao mình không thử scrap website Google dịch nhỉ, bên đó cho xài free mà. Kakaka :smiling_imp:

Google: (nói nhỏ) Cứ thử đi bạn ey, hahaha :smiling_imp:

Sau một hồi mở DevsTool lên tìm hiểu về Google dịch

Tool devs: Á đù, trang này nó gọi 2 api, 1 api trả về request id, 1 api mới thực sự search.

Google: Hahaha :rofl:, tưởng gì, ta làm cái API đó mà không đoán trước việc có một vài thanh niên như chú thích sài ké để tạo tool mà không chịu trả tiền à. Scrap website bị cấm nhé.

Tool devs: Nếu vậy thì ta cứ làm theo cách truyền thống, nhập đoạn text kia vào và đợi kết quả thôi, Google tuổi tôm :rofl:.

Khoảng nửa tiếng hoặc vài tiếng sau

Tool devs: Ơ tool của mình bị làm sao thế này. Tự dưng bị chuyển hướng qua trang ipv4.google.com với một cái khung giải reCaptcha và một đoạn thông báo lạ hoắc:

Hệ thống của chúng tôi phát hiện ra lượng traffic kì lạ từ mạng máy tính của bạn…

Google: Hahaha, tưởng gì. Khôn như ngươi quê ta có đầy. Ngươi có biết ta là ai không? Ta là Google, một trong những công ty lớn nhất thế giới, là nơi đã tạo ra Google dịch, ReCaptcha mà mấy cha Cloudflare hay dùng và cả cái Puppeteer mà ngươi đang dùng đấy. Các đặc điểm nhận ra tool đang dùng Puppeteer nói riêng và các crawler nói chung, ta nắm rất rõ. Muốn dùng sản phẩm của ta để làm tool ư, đăng ký dùng API đê bạn ey :smiling_imp:

TO BE CONTINUE (hoặc không :upside_down_face:)

8 Likes

Gặp case này mình sẽ deploy ra 1 máy chủ (vps) mới trên aws rồi cài open vpn server vào. sau đó ở máy chạy script mình sẽ dùng open vpn client để connect vào là máy mình đổi ip mới.

Rồi cứ thế chạy tiếp

Hmm… Một ý tưởng khá hay nhưng có một vài vấn đề. Đầu tiên, việc kết nối tới VPN sẽ tạo ra delay và sử dụng VPN sẽ có tốc độ chậm hơn so với bình thường. Thường mấy ông làm VPN hay qc VPN sẽ giúp tốc độ mạng nhanh hơn nhưng thực chất không phải, dùng VPN sẽ chậm hơn so với thông thường vì hai lí do:

  1. Packet thay vì gửi thẳng đến server thì ta phải qua thêm một thằng trung gian là VPN, nó mã hóa dữ liệu các thứ rồi mới gửi tới server.

  2. Những công ti lớn như Google thường đặt tạo ra hệ thống máy chủ sao cho tối ưu về mặt vị trí địa lí, ví dụ thay vì packet phải gửi tới tận Mỹ thì nó sẽ gửi tới Singapore chẳng hạn. Giả sử bạn đặt máy chủ VPN ở Mỹ thì tất nhiên máy bạn phải gửi packet đến tận Mỹ rồi máy chủ VPN gửi packet tới server Google ở Mỹ => Tốn thêm thời gian, mất ưu thế về tối ưu cho vị trí địa lí mà Google bỏ một đống tiền ra để làm.

Tiếp theo, mình cần phải nói tới độ ổn định của server VPN mà bạn định làm. Bạn có thể thuê một cái VPS nào đó rồi cài OpenVPN vào. OK, thế bạn có bạn có đảm bảo được nó sẽ chạy một cách mượt mà và ổn định, ít nhất là ở hiện tại hay xa hơn là ở tương lai không? Liệu bạn có thể đảm bảo cái server VPN đó không bị hack không?

Tiếp theo nữa, ngoài cách nhận dạng máy thông qua địa chỉ IP ra, hệ thống của họ còn có cách khác để nhận ra bạn, ví dụ như dùng cookies chẳng hạn, hay chỉ cần biết user đang truy cập có phải là bot hay không thông qua user agent, user profile,…là được. Mà khoan, có lẽ cái này chỉ áp dụng cho Gmail thôi, gg dịch không áp dụng? Hừm… :thinking:.

Chi phí thuê VPS ở những chỗ như AWS khá đắt đỏ vì tiền nào của nấy mà, thuê ở những chỗ lớn dù đắt hơn nhưng ổn định hơn, CSKH tốt hơn, chất lượng tốt hơn. Nếu nhớ không nhầm thì AWS có chính sách sài thử free 1 năm thì phải. Vấn đề là để đăng kí thì cần có thẻ quốc tế, tuy nhiên nếu sài không cẩn thận là bên Amazon lại đòi nợ rồi khóa tài khoản các thứ. Mình từng dùng thẻ giả rồi bị bên Amazon khóa tài khoản và chỉ cho mở lại khi thanh toán nợ (vô tình) đang có.

Tóm lại, đối với một chức năng tưởng chừng như đơn giản như dịch text thì có cần phải làm rườm rà, phức tạp, tốn thời gian bằng cách thuê VPN không? Theo mình thấy, thuê VPS còn tốn tiền và thời gian hơn việc dùng API, mà chưa chắc đã chạy ổn định, nhanh hơn, tốt hơn việc dùng API, mà cả hai cách cũng cần phải có thẻ quốc tế thôi.

Cuối cùng, liệu nhu cầu của bạn là dịch một đoạn text dài hay chỉ dịch một từ? Trong dữ liệu INPUT mình chỉ thấy dịch từ chứ không thấy dịch một câu, một đoạn. Nếu chỉ cần dịch một từ thì chẳng cần dùng Google dịch, VPN các thứ làm gì, dùng luôn API, thư viện từ điển Anh-Việt, Việt-Anh luôn cho nó nhanh, chẳng tốn tiền hay thời gian làm mấy cái này làm gì.

P/s: Nếu muốn chạy offline thì có thể down luôn cái từ điển về, nhưng mấy file từ điển có dung lượng thường có dung lượng khá lớn, cỡ vài chục MB thành ra là nên lưu dưới dạng DB cho tối ưu :slightly_smiling_face:

P/s 2: Ngoài Google dịch ra còn có vài bên cung cấp dịch vụ dịch Anh-Việt, Việt-Anh,…như Bing Translate chẳng hạn, bên này cũng có API riêng như Google dịch và được xài free 2 triệu từ một tháng.

5 Likes

Làm gì phải khổ thế https://github.com/soimort/translate-shell

6 Likes

Lần đầu tiên biết đến cái này luôn :grinning:.Tuy nhiên, cái này dùng Linux shell nên không thích lắm, thấy trên mạng cũng có một vài cái thư viện, API cũng cho phép dịch free, Bing Translate API chẳng hạn.

1 Like

Kiểu như chủ thớt thích nodejs thì nhìn vào đấy mà viết lại là ok.
sài puppeteer vừa nặng vừa dễ bị ban ip.

4 Likes

Công nhận, Puppeteer dùng phần mềm Chromium nặng khoảng 150mb, đã thế khi dùng còn phải load dom element các thứ, dùng luôn translator API hoặc từ điển luôn cho nó gọn. Một file từ điển cũng chỉ khoảng 20mb chứ mấy, so với con số 150mb kia thì cái này còn nhẹ chán.

4 Likes

Fake IP xài proxy được rồi bạn. IP Pool nó nhiều hơn nữa. VPN start lên thì thường gắn liền 1 IP rồi. :smiley:

5 Likes

anh có nhận viết tool dạng như này nhưng là để auto đăng kí nick fb ko ạ, có change ip = dcom nữa. trước giờ e tưởng c# mới thao tác vs chrome dc

À muốn đăng kí nick fb auto thì cần phải fake user agent nè, tạo mail 10 phút nè, và cái khó nhất là giải captcha :rofl:. Muốn giải captcha thì một là em tự giải, hai là dùng dịch vụ giải captcha nhưng thường muốn nhanh và có độ chính xác cao thì cần phải dùng dịch vụ trả phí.

1 Like

rất đúng, hiện tại tool c# e thuê đã tích hợp giải quyết các vấn đề trên, nhưng e muốn hỏi là nodejs có thể tạo dc 1 tool như thế k ạ, vì nó sẽ reg nhanh hơn

2 Likes

Tất nhiên là được, cả Selenium lẫn Puppeteer thực chất đều là thư viện “điều khiển trình duyệt”, cái gì Selenium làm được thì Puppeteer cũng làm được. Muốn tạo ra một tool tương tự trên Nodejs thì cần phải học Javascript cơ bản và đọc tài liệu, hướng dẫn về Puppeteer.

Thế có mấy cái repo github nó nói free & unlimited thì sao? Có bạn nào thử chưa

2 Likes

Mới vừa thử xong. Ngay khi cài đặt thư viện đã hiện “found 3 vulnerabilities (1 high, 2 critical)”, khá quan ngại.Thử paste code ví dụ rồi chạy thử thì quăng ngay quả lỗi “BAD_REQUEST” vào mặt. Nguyên văn:

Error
    at D:\Coding-project\Node.js\GG_trans\node_modules\google-translate-api\index.js:105:17
    at processTicksAndRejections (internal/process/task_queues.js:97:5) {
  code: 'BAD_REQUEST'
}
2 Likes

Cái này chỉ là version của các dependencies cũ thôi, không phải vấn đề.
Nhìn chung chắc cũng dùng bằng API từ devtools.
Google sheets có hàm translate và Google app scripts đó, có chắc sẽ lách được ko :slight_smile:

3 Likes

À, cũng mới vừa kiểm tra source code xong, nó dùng cách 2 như @n08ni_dieppn có nói. Thử search cách fix thì ra một cái thư viện mà ông tạo thư viện trên nói là dùng để tạo token để dùng Google Translate API

Ngoài ra, mình tìm thấy một bài viết hướng dẫn cách dùng Google Translate API free, thử test phát thì kết quả lại chạy được. Tuy nhiên, dùng nhiều quá chắc cũng bị ban IP :V

2 Likes

webdriver thì ngôn ngữ nào chả hỗ trợ bạn ơi, php, c#, java, javascript đều được bạn ạ

1 Like

vpn này mình deploy bằng AMI của aws tầm 2 phút là có rồi bạn ạ. giá cũng không đắt lắm tầm hơn 20$/ tháng loại rẻ.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?