Mạng học trực tuyến tiếp tục giáo dục: Tự động xem video và làm bài tập trực tuyến, vấn đề iframe không kích hoạt
Ngày cập nhật: 13-05-2021 Lượt xem: 4375 Số từ: 359 Phân loại: Tampermonkey
Tìm kiếm
Tôi đang sử dụng Tampermonkey để phát triển một phần mềm tự động xem video và làm bài tập trực tuyến trên nền tảng tiếp tục giáo dục. Mọi thứ đều hoạt động ổn định, ngoại trừ một lỗi khá khó chịu.
Cụ thể là trong quá trình trả lời câu hỏi, các câu hỏi được đặt bên trong một iframe lồng thêm một iframe nữa. Điều này khiến cho script của tôi không thể kích hoạt đúng cách. Chỉ duy nhất iframe này không được kích hoạt, còn những iframe khác thì hoàn toàn bình thường. Tôi đã dành gần một giờ để tìm hiểu nguyên nhân, đầu tiên nghi ngờ là giới hạn của chính công cụ Tampermonkey.
Sau đó, tôi kiểm tra kỹ hơn các yêu cầu mạng trong trình duyệt, và phát hiện ra rằng iframe này thực chất đã trải qua hai lần chuyển hướng (302 redirect). Chính vì lý do này mà script không thể bắt được địa chỉ đích để chạy. Khi tôi thay đổi URL thành địa chỉ cuối cùng sau khi chuyển hướng, mọi thứ liền trở nên suôn sẻ và việc trả lời câu hỏi cũng được tự động hóa thành công.
Không nên chỉ nhìn vào thuộc tính src
của iframe, mà cần theo dõi kỹ các yêu cầu mạng để xác định địa chỉ đích thực sự, đặc biệt là có xảy ra bất kỳ chuyển hướng nào hay không.
Mẹo và bẫy cần tránh
Trong quá trình làm bài tập tại một số trường học trực tuyến ở tỉnh Phúc Kiến, An Huy và Thiểm Tây, tôi nhận thấy rằng địa chỉ mục tiêu của iframe không phải lúc nào cũng cố định. Đôi khi, đường dẫn tới trang câu hỏi và trang chứa đáp án là khác nhau. Do đó, bạn cần thiết kế script sao cho có thể xử lý cả hai giao diện, nhằm tránh tình trạng bài đã làm xong nhưng script lại không thể tiếp tục xử lý.
Ngoài ra, một điều đáng chú ý là trên Chrome, bạn sẽ không thể xem trước nội dung của iframe thông qua tab mạng (Network Tab) như bình thường. Bạn phải sao chép URL đích và mở nó trong một tab mới để kiểm tra, đây là cách hữu hiệu để xác minh xem trang đích có phải là nơi bạn muốn tác động hay không.