repo นี้มีสคริปต์ที่ฉันเคยเอาชนะเกมพิมพ์ดีดออนไลน์ โดยติดอันดับกระดานผู้นำด้วย WPM ที่ไร้มนุษยธรรมเกือบ 450
ฉันไม่แนะนำให้ใช้สคริปต์นี้กับ typeracer จริงๆ มันขัดต่อ TOS (บัญชีของคุณจะถูกแบนเช่นเดียวกับของฉัน) และทำให้กระดานผู้นำสำหรับผู้เล่นจริงคนอื่นๆ แต่ฉันพบว่าโครงการนี้เป็นเพียงการทดลองและประสบการณ์การเรียนรู้ที่น่าสนใจแทน
สำหรับผู้ที่สงสัย เราได้สรุปแต่ละขั้นตอนของกระบวนการไว้ด้านล่างแล้ว โปรดทราบว่าวิธีการเฉพาะนี้อาจใช้ไม่ได้อีกต่อไปในอนาคต เนื่องจาก typeracer อาจ (และควร) เปลี่ยนขั้นตอนการตรวจสอบผู้ใช้ ฉันสามารถยืนยันได้ว่าสคริปต์นี้ใช้งานได้ในวันที่ 2020-02-16
จริงๆ แล้วการพิมพ์ race โดยอัตโนมัตินั้นง่ายพอๆ กับการแยกข้อความออกจาก DOM และส่งชุดเหตุการณ์คีย์ JavaScript ที่ถูกต้อง
ในขณะที่ความเร็วของการแข่งขันของคุณถูกกำหนดโดยช่วงเวลาระหว่างการกดปุ่มปลอม (ซึ่งอาจต่ำโดยพลการ) ดูเหมือนว่าหาก ณ จุดใดก็ตาม WPM ของคุณเกิน 450 คุณจะถูกไล่ออกจากเกม ดังนั้นจึงมีขีดจำกัดบนของ WPM ที่สคริปต์สามารถรับได้ เพื่อให้บรรลุถึง 445 WPM (สูงสุดที่ฉันสามารถทำได้) การกดปุ่มจะถูกแยกตามช่วงเวลาแบบสุ่มระหว่าง 22.5ms และ 26.5ms
หลังจาก WPM ที่สูงเพียงพอ (>100) คุณจะเห็นภาพ captcha ซึ่งไม่มีรูปแบบข้อความล้วนๆ ในฝั่งไคลเอ็นต์ นี่คือความท้าทายที่แท้จริง
ในการตรวจสอบคะแนนของคุณ คุณต้องสามารถกรอก CAPTCHA ได้ภายในเวลาที่กำหนดและมีความแม่นยำสูงเพียงพอ (~ 95% หรือมากกว่า) แคปต์ชาประกอบด้วยข้อความที่บิดเบี้ยว 5 บรรทัด (ตัวเอียงและไซน์ซอยด์) โดยมีเครื่องหมายสีดำปกคลุมรูปภาพ
แคปต์ชาทั่วไป
การทำ captcha ให้เสร็จสิ้นนั้นเป็นกระบวนการที่ค่อนข้างยาว ยุ่งเหยิง มีความน่าจะเป็น เป็นการเก็งกำไร และต้องดำเนินการด้วยตนเอง อย่างไรก็ตาม จะต้องทำให้เสร็จสิ้นเพียงครั้งเดียว ดังนั้นฉันจึงไม่มีความตั้งใจที่จะปรับปรุงกระบวนการให้มีประสิทธิภาพมากขึ้น
ก่อนที่จะอ่านรูปภาพ สคริปต์จะทำการประมวลผลล่วงหน้าโดยใช้พื้นที่ทำงาน HTML ชั่วคราวเพื่อให้จดจำข้อความได้ง่ายขึ้น โดยเฉพาะอย่างยิ่ง รูปภาพจะถูกสแกนหาพิกเซลที่มืดพอที่จะเป็นส่วนหนึ่งของเครื่องหมายสีดำ เมื่อพบพิกเซล พิกเซลจะเปลี่ยนเพื่อแสดงสีเดียวกับพื้นหลัง ณ จุดนั้นในรูปภาพ
ภาพแคปต์ชาเดียวกันหลังจากการประมวลผลล่วงหน้า
หลังจากใช้ขั้นตอนนี้แล้ว ฉันยังพยายามที่จะกลับเอฟเฟกต์การบิดเบี้ยวแบบไซนิซอยด์ด้วย ซึ่งค่อนข้างมีประสิทธิภาพในการปรับปรุงความสามารถในการอ่านของรูปภาพที่กำหนด อย่างไรก็ตาม ระยะเวลาจริงของเอฟเฟกต์การบิดเบี้ยวจะแตกต่างกันไปในแต่ละรูปภาพทีละสองสามพิกเซล แม้แต่การใช้เอฟเฟ็กต์ชดเชยพิกเซลสองสามพิกเซลก็ลดความสามารถในการอ่านลงอย่างมากเมื่อสิ้นสุดภาพเมื่อคลื่นไม่อยู่ในเฟส ดังนั้นฉันจึงตัดสินใจลบส่วนนี้ของการประมวลผลล่วงหน้าออก
ขั้นตอนต่อไปคือการส่งภาพที่ประมวลผลล่วงหน้าที่เราสร้างขึ้นไปยังไลบรารี OCR (Optical Character Recognition) ที่เรียกว่า Tesseract เพื่อให้สคริปต์ทั้งหมดทำงานภายในเบราว์เซอร์ สคริปต์จะใช้พอร์ต JS ของไลบรารีที่มีอยู่ที่นี่
หลังจากนั้นไม่กี่วินาที Tesseract จะส่งคืนข้อความบางส่วนโดยมีความแม่นยำระหว่าง 65% ถึง 85%
การวิเคราะห์ข้อความที่ Tesseract ส่งกลับเผยให้เห็นข้อผิดพลาดทั่วไปบางประการซึ่งฉันสามารถย้อนกลับได้ด้วยตนเองด้วยการจัดการสตริง
ประกอบด้วยการเปลี่ยนอักขระต่างๆ เช่น
เมื่อขั้นตอนก่อนหน้าเสร็จสมบูรณ์ ข้อความจะถูกแทรกลงในกล่องข้อความที่ใช้กรอก captcha ณ จุดนี้ ข้อความยังมีความแม่นยำไม่สูงพอที่จะส่ง captcha อย่างไรก็ตาม ยังมีเวลาสำหรับการแก้ไขด้วยตนเองโดยเผื่อเวลาไว้ประมาณ 3-5 วินาที
เพื่อช่วยในกระบวนการนี้ คุณสามารถแก้ไขข้อผิดพลาดในการสะกดคำง่ายๆ ได้อย่างง่ายดายโดยใช้เบราว์เซอร์ในตัวตรวจตัวสะกด (คลิกขวา เลือกคำที่แนะนำจากรายการ)
เมื่อนำขั้นตอนเหล่านี้ไปใช้ทั้งหมด ฉันใช้เวลาประมาณครึ่งโหลในการพยายามเพื่อให้ได้ความแม่นยำซึ่งทำให้ captcha เป็นที่พอใจ