Tự động trả lời bài thi trên trang web giáo dục liên tục
Ngày cập nhật: 2022-07-06 | Số lần đọc: 6556 | Số từ: 1407 | Phân loại: Tampermonkey
Tìm kiếm
Tôi đã giúp vợ tôi xây dựng một công cụ tự động trả lời các bài kiểm tra giáo dục liên tục. Sau khi thử nghiệm, hiệu quả khá tốt. So với việc tự tìm đáp án bằng cách lên Google, phương pháp này tiết kiệm thời gian đáng kể – vì mỗi lần tìm kiếm có thể mất tới 30 phút.
Nguyên nhân gây ra hiện tượng bỏ sót đáp án ở câu hỏi nhiều lựa chọn
Khi làm đến câu cuối cùng, số lượng câu chưa trả lời vẫn tiếp tục tăng. Điều này xảy ra do interval
được thực thi liên tục trong cùng một trang câu hỏi. Giải pháp là sau khi trả lời xong, cần gọi clearInterval
. Cụ thể, nếu câu hỏi không có đáp án thì biến “no answer” sẽ tăng, còn nếu có đáp án thì biến “has answer” sẽ tăng.
Một nguyên nhân khác là mạng bị lag dẫn đến việc bỏ sót đáp án. Vì mỗi câu hỏi là một trang riêng biệt và phải tải dữ liệu từ server, nên sau khi nhấn “Câu tiếp theo”, nếu trang mới không load trong vòng 2 giây, chương trình lại chạy lại quy trình trả lời. Đặc biệt đối với câu hỏi nhiều lựa chọn, việc nhấn lặp lại sẽ hủy bỏ các lựa chọn trước đó, dẫn đến hiện tượng bỏ sót đáp án thường thấy ở những mục đầu tiên.
Điểm cải tiến: Việc chỉ dùng clearInterval
là chưa đủ, bởi có thể làm mất đi kết quả người dùng đã chọn thủ công. Cần thêm bước kiểm tra trạng thái đã chọn hay chưa trước khi thao tác. Tôi đã mở một bài kiểm tra mới để kiểm tra đoạn mã xác định trạng thái checkbox.
Tốc độ trả lời phụ thuộc vào tốc độ mạng, vì mỗi câu hỏi đều được tải về từ máy chủ. Nếu tốc độ mạng chậm, việc chuyển sang câu tiếp theo cũng chậm hơn, và khi nhân với 50 câu, thời gian tổng cộng có thể tăng đáng kể. Từ tình huống trước, rõ ràng việc mỗi câu mất hơn 2 giây để tải, lý giải tại sao thời gian hoàn thành thực tế thường lâu hơn rất nhiều so với dự kiến.
Các tính năng chính:
- Trang danh sách: Tìm các bài học chưa hoàn thành và tự động chuyển sang.
- Phân tích danh sách bên phải: Xác định các phần chưa hoàn thành.
- Nhấn nút phát video.
- Sau khi video kết thúc, tự động chuyển sang chương tiếp theo.
- Gặp bài kiểm tra chương, tự động chuyển chương. Cách này sử dụng chức năng click bên phải, do đó tránh được yêu cầu làm bài kiểm tra bắt buộc.
- Trang chủ: Phát hiện các khóa học chưa hoàn thành và tự động chuyển vào. Sửa lỗi hiển thị “100.0%” thành “100%”.
- Xử lý trường hợp có nhiều video trên cùng một trang. Có vấn đề phát sinh do cùng lúc chỉ cho phép phát một video duy nhất. Nhấn quá nhanh khiến hệ thống báo lỗi.
- Dùng timer ngoài để đánh dấu trạng thái hiện tại trong bộ nhớ.
- Cải tiến điều kiện “hoàn thành”: Chỉ coi là hoàn tất khi tất cả trạng thái đều là “đã hoàn thành”.
- Chỉ phát video đầu tiên chưa hoàn thành.
- Kiểm tra khả năng hỗ trợ nhiều video trên cùng một trang.
- Xử lý lỗi pop-up yêu cầu đổi đường truyền. Hỗ trợ chuyển giữa đường truyền 1 và 2.
- Bug: Một số khóa học thực tập không có tiến độ.
- Bài thi: Mỗi thí sinh chỉ có 2 cơ hội; mỗi lần thi kéo dài 90 phút; sau khi làm xong sẽ có đáp án.
- Liệt kê các nhiệm vụ cần hoàn thành ngay từ vòng đầu tiên.
- Hiện chỉ hỗ trợ 3 dạng câu hỏi: trắc nghiệm đơn, trắc nghiệm đa, và đúng/sai. Ngoài ra còn có câu hỏi tự luận, nhưng cũng đã có sẵn đáp án.
- Định dạng link bài thi: Lấy thông tin từ lịch sử trình duyệt.
- Chức năng lưu đáp án: Nếu không hoàn thành, người dùng phải nhập tay.
- Xác định khi nào kết thúc: Khi nút “Câu tiếp theo” chuyển sang màu xám?
- Nhấn nút nộp bài.
- Lấy tiêu đề câu hỏi. Mở một kỳ thi mới để tránh phải dùng lần cuối, cảm giác lo lắng.
- Kiểm tra tính hợp lệ của link bài thi.
- Vào trang sau khi nộp bài: Kiểm tra xem địa chỉ URL có thay đổi không.
- Không nên tự động nhấn nút nộp bài, để có thể xem lại thống kê trước khi nộp, ví dụ như số câu chưa làm.
- Không nhập đáp án cho câu hỏi có tiêu đề rỗng.
- Đối với câu hỏi là hình ảnh: Tôi đang cố gắng tối ưu hóa để tránh nhầm lẫn. Nếu một kỳ thi có nhiều câu hỏi dạng hình ảnh, thì chương trình có thể gặp khó khăn. Tôi sẽ ghi lại các link hình ảnh phía trước.
- Trắc nghiệm đa lựa chọn có đáp án đúng một phần. Có thể do nhấn quá nhanh. Hiện đã giảm tốc độ xuống 200ms/click. Thời gian trả lời mỗi câu tăng từ 1.5s lên 2s. Khoảng cách giữa các lần click từng option cũng tăng từ 0.1s lên 0.2s. Tổng thời gian mỗi câu tăng thêm 0.5s.
- Sau khi hoàn thành tất cả, quay về trang chủ. Tôi sẽ tìm một ví dụ đã hoàn thành để kiểm tra.
- Vấn đề bỏ sót đáp án. Tôi chưa chắc chắn, nhưng thử thay thế cách dùng
setInterval
bằng phương pháp khác. Kết hợp với hiện tượng lạ là hiển thị sai số câu chưa trả lời. Nguyên nhân có lẽ nằm ở việc mỗi lần nhấn “Câu tiếp theo”, toàn bộ trang sẽ được tải lại, chứ không phải là AJAX. Do đó, việc đếm câu hỏi bị sai. Và lý do chỉ câu hỏi nhiều lựa chọn bị ảnh hưởng là vì các câu hỏi đơn hoặc đúng/sai, dù nhấn nhiều lần cũng không bị hủy bỏ. Còn câu hỏi nhiều lựa chọn thì ngược lại. Giải pháp là kiểm tra xem đã chọn chưa, nếu rồi thì không nhấn lại nữa. Điều này có thể khắc phục hoàn toàn vấn đề. - Làm thế nào để biết một đáp án đã được chọn?
- Giải thích cách bổ sung chức năng chỉnh sửa đáp án cho các câu không có sẵn.
- Hỗ trợ câu hỏi tự luận. Với bài thi tiếng Anh, giao diện là một trình soạn thảo văn bản phong phú (rich text). Nếu tích hợp được, thì chức năng thi sẽ gần như hoàn hảo.
Hy vọng nội dung trên đã cung cấp đầy đủ thông tin và mang lại giá trị cho bạn! Nếu bạn muốn tôi giúp tùy chỉnh script hoặc hướng dẫn thêm, hãy để lại bình luận nhé!