Mendapatkan Skor Tinggi Saat Mengetik

Keterampilan mengetik di era digital ini sejajar dengan kebisaan menulis. Pada sebagian orang, sekedar mengetik saja belum cukup, akurasi dan kecepatan tinggi dibutuhkan dalam rangka mempermudah hidup. Untuk menilai akurasi dan kecepatan mengetik itu, beberapa situs menyediakan tempat untuk berlatih dan menguji. Di bawah ini kita akan mengikuti pengalaman John mendapatkan skor maksimal, sayang (atau untung)nya bukan dengan cara berlatih mengetik dengan tekun.

KODE LIMA DETIK

import time
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Firefox(executable_path='d:\\geckodriver.exe')
driver.get('https://10fastfingers.com/advanced-typing-test/indonesian')

# wait for cookies form to load
time.sleep(5)

# allow all cookies
if driver.find_element_by_css_selector('#CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll'):
    allow_all_cookies = driver.find_element_by_css_selector('#CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll')
    allow_all_cookies.click()

# get words
try:
    word_list_element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#wordlist')))
    words_list = driver.find_element_by_css_selector('#wordlist')

    # type to form
    text_to_input = words_list.get_attribute('textContent').replace('|', ' ')
    input_field = driver.find_element_by_css_selector('#inputfield')

    for char_to_type in range(0, len(text_to_input)):
        input_field.send_keys(text_to_input[char_to_type])
        print(text_to_input[char_to_type])
        time.sleep(0.1)
finally:
    time.sleep(30)
    driver.close()

Latar Belakang

Sejujurnya sekarang lebih panjang durasi mengetik kita ketimbang menulis tangan. Bahkan bagi kita yang bekerja jauh dari komputer sekalipun. Karena kita tetap mengetik di media sosial atau aplikasi pengiriman pesan, menggunakan telepon selular.

Lebih lagi untuk siapa yang bekerja menggunakan komputer, mengetik adalah kebutuhan. Karena manusia suka meningkatkan dirinya, dan ditopang dengan budaya kapitalisme yang menuntut peningkatan produktivitas, maka sekedar bisa mengetik masih belum cukup, harus cepat dan akurat.

Measure what is measurable, and make measurable what is not so

Galileo Galilei

Menindaklanjuti ular-ular pakde Galileo, John, sebagai anggota komunitas kapitalis yang dituntut produktif, perlu membuktikan bahwa dirinya kapabel untuk masuk dalam kasta elit juru ketik. Diperlukan suatu angka sebagai penanda kemahiran John.

Angka yang bisa ia dapatkan dari layanan internet untuk mengukur kecepatan mengetik.

Setelah beberapa menit mencoba benar-benar mengetik, John bosan. Prestasi terbaiknya hanya di angka 60-an kata per menit (words per minute). Sudah lebih tinggi dari rata-rata kecepatan (41 wpm) namun masih jauh dari pemenang UTC 2020 di kecepatan 182 wpm.

Ide cemerlang menghampiri John, bagaimana kalau diotomasi saja pekerjaan mengetik ini?


Teknologi Digunakan

10fastfingers.com

Salah satu layanan online untuk mengukur kecepatan mengetik adalah 10fastfingers.com. Selain menyediakan tes mengetik dalam bahasa Indonesia, situs ini juga menawarkan kompetisi mengetik yang dapat diikuti. Ada lagi layanan lain seperti belajar mengetik atau Top 1000 namun tidak semua layanan tersedia untuk teks bahasa Indonesia.

Salah satu fitur yang menarik adalah kita akan mendapat gambar lucu seperti di atas, setelah selesai melakukan tes mengetik. Gambar yang dapat kita pamerkan (tentu saja).

Selepas selesai membaca tulisan ini pembaca tidak akan lagi takjub dengan capaian 96kpm di gambar itu, percayalah 😀

Selenium Python

Pada tulisan sebelum ini, kita sudah pernah membahas Selenium. Singkatnya teknologi ini mengotomasi peramban sehingga kita tak perlu melakukan sendiri pelbagai hal di sebuah situs web, cukup ketik beberapa kode kemudian jalankan kode tersebut.

Jika belum pernah menggunakan Selenium, silahkan mengikuti proses pada tulisan ini setidaknya sampai di bagian Kode Sangat Sederhana.


Kode

John akan membuat kode untuk “mengetik” pada halaman Tes Mengetik (mahir) untuk teks berbahasa Indonesia. Pertama kode sederhana untuk membuka halaman tersebut, menunggu beberapa sekon kemudian menutup peramban digunakan.

Buka Halaman Tes

import time
from selenium import webdriver

driver = webdriver.Firefox(executable_path='d:\\geckodriver.exe')
driver.get('https://10fastfingers.com/advanced-typing-test/indonesian')

time.sleep(5)
driver.close()

Gecko Driver adalah yang kita gunakan saat peramban yang dipakai adalah Firefox. Kita menentukan executable_path sama dengan lokasi file Gecko Driver yang kita punya.

Fungsi sleep berguna untuk menghentikan proses selama 5 (lima) sekon, sekedar memberi waktu untuk kita melihat apakah halaman web telah berhasil dibuka.

Baris terakhir meminta agar browser ditutup, dengan fungsi close(). Selengkapnya fungsi yang ada pada Python Selenium dapat merujuk di sini.

Beri nama kode di atas dengan min1.py kemudian jalankan pada console/command prompt/terminal.

python min1.py

Allow All Cookies

Pop up permintaan cookies cukup menganggu karena itu kita akan melakukan klik pada tombol hijau bertuliskan Allow all cookies.

Tombol tersebut memiliki CSS ID Selector CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll (klik kanan, pilih Inspect untuk mendapatkan ID dari masing-masing elemen pada web). Menggunakan ID tersebut kita akan meminta selenium untuk melakukan klik.

import time
from selenium import webdriver

driver = webdriver.Firefox(executable_path='d:\\geckodriver.exe')
driver.get('https://10fastfingers.com/advanced-typing-test/indonesian')

time.sleep(5)
# allow all cookies
if driver.find_element_by_css_selector('#CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll'):
    allow_all_cookies = driver.find_element_by_css_selector('#CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll')
    allow_all_cookies.click()

time.sleep(5)
driver.close()

Simpan kode di atas, misal pada file baru dengan nama min2.py kemudian jalankan.

Daftar Kata untuk Diketik

Daftar kata yang perlu diketik ada di suatu tempat dalam web, cukup gunakan fungsi search di tab Inspector, kita akan mendapati dimana daftar tersebut tersimpan. Yaitu pada CSS ID wordlist.

Kode di bawah ini akan mengambil daftar kata tersebut dan menampilkan pada command prompt/terminal/console.

import time
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Firefox(executable_path='d:\\geckodriver.exe')
driver.get('https://10fastfingers.com/advanced-typing-test/indonesian')

# wait for cookies form to load
time.sleep(5)

# allow all cookies
if driver.find_element_by_css_selector('#CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll'):
    allow_all_cookies = driver.find_element_by_css_selector('#CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll')
    allow_all_cookies.click()

# get words
try:
    word_list_element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#wordlist')))
    words_list = driver.find_element_by_css_selector('#wordlist')

    print(words_list.get_attribute('textContent'))
finally:
    time.sleep(5)
    driver.close()

Bagian kode yang baru adalah baris yang menggunakan WebDriverWait, berguna agar driver menunggu hingga elemen tersebut (CSS ID wordlist) tersedia/ditampilkan.

Di era sekarang saat bagian-bagian web di-load terpisah kita akan sering (sekali) menggunakan fitur Wait dari selenium ini. Karena proses kita perlu menunggu suatu elemen yang ternyata tidak langsung ditampilkan oleh server sehingga harus meminta selenium untuk menunggu sampai elemen tersebut ada baru berpindah ke tugas selanjutnya.

Seperti terlihat, antar kata dipisahkan dengan tanda pipa |. Pada kode selanjutnya John akan mengganti tanda pipa menjadi spasi kemudian “mengetik” satu per satu karakter (huruf dan spasi) ke form inputan.

Mengetik

import time
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Firefox(executable_path='d:\\geckodriver.exe')
driver.get('https://10fastfingers.com/advanced-typing-test/indonesian')

# wait for cookies form to load
time.sleep(5)

# allow all cookies
if driver.find_element_by_css_selector('#CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll'):
    allow_all_cookies = driver.find_element_by_css_selector('#CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll')
    allow_all_cookies.click()

# get words
try:
    word_list_element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#wordlist')))
    words_list = driver.find_element_by_css_selector('#wordlist')

    # type to form
    text_to_input = words_list.get_attribute('textContent').replace('|', ' ')
    input_field = driver.find_element_by_css_selector('#inputfield')

    for char_to_type in range(0, len(text_to_input)):
        input_field.send_keys(text_to_input[char_to_type])
        print(text_to_input[char_to_type])
        time.sleep(0.1)
finally:
    time.sleep(30)
    driver.close()

Bagian kode yang baru adalah

    # type to form
    text_to_input = words_list.get_attribute('textContent').replace('|', ' ')
    input_field = driver.find_element_by_css_selector('#inputfield')

    for char_to_type in range(0, len(text_to_input)):
        input_field.send_keys(text_to_input[char_to_type])
        print(text_to_input[char_to_type])
        time.sleep(0.1)

Baris pertama mengganti tanda pipa dengan spasi sedang baris kedua untuk membuat variabel penampung form input (CSS ID inputfield) yang akan digunakan berkali-kali pada kode di bawahnya.

Baris ketiga memulai iterasi (perulangan) sejumlah banyaknya karakter yang akan diinput. Untuk mengemulasi mengetik maka selenium perlu mengisi form input dengan satu per satu karakter.

Pada tiap perulangan fungsi print akan menampilkan karakter apa yang “sedang diketik” dan selanjutnya menunggu selama 0,1 detik sebelum “mengetik” karakter lainnya. Pemilihan waktu tunggu 0,1 detik akan menghasilkan kecepatan 90an KPM. Silahkan bereksperimen dengan berbagai macam angka untuk mendapatkan hasil-hasil lainnya.

Variasi Lain

Sampai kode terakhir di atas, John sudah mendapatkan cara untuk memperoleh skor tinggi dalam mengetik. Namun kode di atas dapat ditambahi lagi agar “mengetiknya” lebih natural. Beberapa ide yang terpikirkan oleh John:

  • Jeda antar inputan karakter dibuat acak dengan rentang tertentu, misal 0,01 hingga 0,1 sekon. Karena saat mengetik manusia “betulan” tentu tidak akan selalu seragam jeda antar penekanan tuts keyboardnya.
  • Beberapa karakter sengaja diubah agar menjadi saltik. Karena manusia normal tentu akan mengalami saltik, apalagi jika mengetik dengan kecepatan tinggi.
  • Menghentikan proses mengetik setelah waktu tertentu, misal dari 60 sekon waktu yang diberikan, “mengetik” hanya dilakukan selama 55 sekon. Karena jika tidak dihentikan, maka komputer akan terus “mengetik” bahkan setelah waktu tes 60 detik sudah habis (seperti pada video di atas), hal ini tentu tidak mungkin dilakukan oleh manusia yang benar-benar sedang mengambil tes mengetik itu.

Simpulan

Sama seperti banyak kegiatan lainnya pada web, menghitung kecepatan mengetik juga dapat diotomasi sehingga hasil tertentu yang terlihat “wah” tidak melulu harus dipercaya sebagai hasil dari upaya mengetik yang sungguh-sungguh.

Namun penyedia layanan juga tak menutup mata atas potensi kecurangan tersebut. Beberapa sudah menerapkan pelbagai metode anti curang (Anticheat jika menggunakan istilah 10fastfingers.com) untuk memastikan skor yang mereka tampilkan adalah hasil dari pekerjaan tangan manusia (secara langsung).


Cover Photo by Patrick Fore on Unsplash


Referensi


Berlangganan

Suka tulisan di sini, silahkan mengisi formulir di bawah ini untuk berlangganan agar kami dapat mengirim pemberitahuan tulisan baru.

Leave a Reply

Your email address will not be published. Required fields are marked *