Viết script cho chrome

Hi there !
Mình xin vào thẳng vấn đề, nhờ mọi người tư vấn giúp ạ.
Mình có một kịch bản user case như thế này :
Mình có một domain (chorme đã cấp quyền âm thanh cho domain này) khi truy cập vào domain này thì tab sẽ phát âm thanh nhưng không phải lúc nào cũng có âm thanh khi truy cập tab này, xác xuất phát âm thanh là ngẫu nhiên cho mỗi lượt truy cập).

Bài toán đặt ra là truy cập vào domain này sao cho nhận được thông báo âm thanh với thời gian ngắn nhất có thể.

=> Cách giải quyết : Mở nhiều cửa sổ chrome, trên mỗi cửa sổ chrome lại mở nhiều tab (đến số lượng chỉ định hoặc đạt đến dung lượng RAM nhất định), các tab reload page liên tục cho đến khi nào có 1 tab nào đó phát ra âm thanh (GIẢI SỬ ĐÃ MỞ 1000 TAB KHI NGHE ÂM THANH THÌ NGƯỜI DÙNG KHÔNG BIẾT TAB NÀO ĐANG PHÁT ÂM THANH) ==> giải quyết bằng cách viết code như thế nào đó để xác định được tab nào đang phát âm thanh và mở tab đó full màn hình đồng thời tắt các tab còn lại.

*Đây là vấn đề có thật trong project thực tế mình đang làm, không phải bài tập trong trường

Cho mình hỏi với vấn đề như trên thì Selenium có thể giải quyết được không ? hay có công cụ nào có thể giải quyết được (mình không phải tester)

Nhu cầu của mình :

  • Script có thể auto mở nhiều tab hoặc cửa sổ chrome.
  • Nhận biết được tab đang phát âm thanh.
  • Phân biết được các tab và cửa sổ chrome với nhau.
  • script có thể tắt được tab.
  • script có thể resize cửa sổ.

Cảm ơn mọi người đã tư vấn…

Thế thì Selenium thôi.
Còn việc phát hiện có âm thanh đang phát thì dùng một số truy vấn sẽ ra thôi. Tìm thẻ audio (hoặc video), xét thời gian hiện tại với 0.
Bạn chỉ tìm từng yêu cầu riêng biệt (bằng tiếng Anh). Mình thử tìm và hầu hết đều có giải pháp trên SO.

3 Likes

Phát hiện âm thanh chỉ có dùng extension mới cho kết quả chính xác được, vì nó có thể truy cập properties của tab, trong đó có audible. Dù tab phát bằng html5, flash hay silverlight, … nó đều nhận diện được.

4 Likes

@SITUVN.gcd @Vong_Hoang_Tuong Cảm ơn bạn đã hỗ trợ, Selenium có phân biệt được các tab, các cửa sổ với nhau không ? mỗi tab có ID gì không ạ ?

this.driver.Manage().Window.Maximize();

2 Likes

Script không giải quyết được vấn đề đâu.

Cách giải quyết theo mình là tải Chromium về nghiên cứu, viết trực tiếp extension cho nó, vì nó là nguồn mở rồi chọc chạch trong đó.

Nếu thấy Chromium phức tạp, hãy thử tải Firefox về, cũng mã nguồn mở luôn.

Với các yêu cầu kể trên chỉ có thể thực hiện trực tiếp với trình duyệt mới giải quyết triệt để bài toán. Các trình duyệt hiện nay không cho bên ngoài can thiệp vào bằng script đâu vì đều đang chạy ở chế độ sandbox để tránh bị “thủng” từ trang web nọ qua trang web kia, cũng tránh thủng từ phần mềm nọ sang phần mềm kia.

1 Like

Theo lý thuyết là được, Chrome Extensions có đủ API đáp ứng yêu cầu, nó cũng có thể bypass cả CORSCSP.

@cihipev108 mình không nói đến việc dùng Selenium, chỉ thuần Chrome Extensions. Nhưng nếu vì lý do nào khác bạn muốn thao tác với trình duyệt nhiều hơn thì có thể kết hợp cả 2.

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