Web Automation Pengisian Formulir Menggunakan Selenium dan Data Excel (Web Tables)
Selenium adalah pustaka open-source yang memungkinkan kita untuk mengotomatiskan interaksi dengan browser web.
Di era digital yang serba cepat ini, otomatisasi menjadi salah satu cara yang efektif untuk menyederhanakan tugas-tugas yang repetitif. Salah satu aplikasi nyata dari otomatisasi adalah pengisian formulir web secara otomatis, terutama ketika berurusan dengan volume data yang besar dan berulang-ulang. Mengisi formulir secara manual satu per satu bukan hanya membosankan, tetapi juga rentan terhadap kesalahan manusia. Dalam blog ini, saya akan berbagi pengalaman untuk membuat program otomatisasi menggunakan Selenium, yaitu sebuah pustaka Python yang populer untuk web automation dengan data dari file Excel. Program ini akan membantu mengisi formulir web secara otomatis dengan memanfaatkan data yang diambil dari file Excel.
Mengapa Selenium dan Excel?
Selenium adalah pustaka open-source yang memungkinkan kita untuk mengotomatiskan interaksi dengan browser web, seperti mengklik tombol, mengisi input, mengirim formulir, dan lain-lain. Ini sangat berguna untuk pengujian web, pemrosesan batch, dan tugas-tugas otomatisasi lainnya. Menggunakan Selenium kita dapat meniru perilaku pengguna dalam menjelajahi situs web dan melengkapi formulir.
Sementara itu, Excel adalah salah satu alat paling umum untuk menyimpan dan mengelola data dalam bentuk tabel. Menggunakan Python dan pustaka openpyxl
kita dapat mengakses data dari Excel dan memanfaatkannya untuk pengisian formulir secara otomatis. Dalam kasus ini kita menggunakan Selenium untuk menjalankan browser dan mengisi formulir web berdasarkan data yang diambil dari Excel. Bayangkan, jika kita memiliki ratusan data yang perlu diinput ke sistem berbasis web — dengan program ini, pekerjaan yang tadinya bisa memakan waktu berjam-jam bisa selesai dalam hitungan menit.
Langkah-langkah Memulai
Untuk memulai otomatisasi ini ada beberapa komponen yang perlu kita siapkan diantaranya:
- Python: Bahasa pemrograman utama yang digunakan.
- Selenium: Pustaka Python untuk otomatisasi browser. kita bisa menginstalnya dengan perintah
pip install selenium
. - Chromedriver: Sebuah driver untuk mengontrol browser Chrome dari Selenium. kita dapat mengunduhnya dan memastikan bahwa versi Chrome dan Chromedriver kita kompatibel.
- Openpyxl: Pustaka Python untuk membaca dan menulis file Excel. Ini bisa diinstal dengan
pip install openpyxl
. - Excel File: File Excel yang berisi data yang akan kita input ke formulir.
Setelah semua komponen diinstal kita siap membuat script otomatisasi. Berikut adalah langkah-langkah terperinci yang digunakan dalam kode program.
Import Library
Berikut penjelasan untuk setiap library yang diimpor dalam kode:
Selenium
Selenium adalah pustaka Python yang digunakan untuk otomatisasi browser web. Selenium memungkinkan kita untuk mengontrol browser, mengklik tombol, mengisi formulir, menggulir halaman, dan berbagai tindakan lainnya yang biasa dilakukan oleh pengguna di situs web.
webdriver
: Modul ini berfungsi untuk mengendalikan browser web. Dengan webdriver
, kita dapat menjalankan dan mengontrol berbagai browser seperti Chrome, Firefox, atau Edge. Pada kode ini, webdriver.Chrome()
digunakan untuk menginisialisasi browser Chrome agar bisa diotomatisasi.
expected_conditions
(EC): Modul ini berisi berbagai kondisi yang umum digunakan saat menunggu elemen di halaman web. Selenium tidak selalu bisa langsung berinteraksi dengan elemen, terutama jika halaman memuat elemen secara dinamis (misalnya menggunakan JavaScript). Dengan modul ini kita dapat memastikan bahwa elemen sudah siap untuk diakses. Pada kode ini kita menggunakan kondisi seperti EC.element_to_be_clickable
untuk menunggu tombol agar bisa diklik.
WebDriverWait
: Fungsi ini digunakan untuk menunggu elemen sampai kondisi yang kita tentukan terpenuhi. Misalnya, kita bisa menunggu hingga tombol dapat diklik atau elemen tertentu muncul di halaman. Pada kode ini, WebDriverWait
memastikan elemen tombol "Add New Record" sudah dapat diklik sebelum melanjutkan aksi lainnya.
TimeoutException
: Exception ini digunakan untuk menangani situasi ketika elemen yang kita tunggu tidak muncul dalam batas waktu yang ditentukan. Ini berguna untuk memastikan program tidak terjebak menunggu terlalu lama. Dalam kode ini, kita menangani kesalahan jika formulir tidak muncul setelah tombol “Add New Record” diklik.
ElementClickInterceptedException
: Exception ini terjadi ketika ada elemen lain yang menghalangi interaksi dengan elemen yang ingin kita klik. Dengan menangani exception ini, kita bisa tahu mengapa tombol gagal diklik. Pada kode ini, jika terjadi masalah saat mengklik tombol, program akan mencetak pesan kesalahan.
By
: Digunakan untuk menemukan elemen di halaman web berdasarkan berbagai metode pencarian, seperti berdasarkan ID, XPATH, atau nama tag HTML. Pada kode ini, kita menggunakan By.ID
untuk mencari elemen berdasarkan atribut id
HTML, seperti tombol atau input di formulir.
Openpyxl
openpyxl
adalah pustaka Python yang digunakan untuk bekerja dengan file Excel berformat .xlsx
. Pustaka ini memungkinkan kita untuk membaca, menulis, dan memodifikasi file Excel secara langsung dalam program Python.
load_workbook
: Fungsi ini digunakan untuk membuka file Excel yang ada dan memuatnya ke dalam program. Setelah workbook dimuat, kita bisa mengakses sheet yang ada di dalamnya dan mengambil data dari sel yang diperlukan.
Pada kode ini, load_workbook(filename="/home/dadandw/dev/data.xlsx")
digunakan untuk memuat file Excel bernama data.xlsx
dari path yang telah ditentukan. Data dari sheet kemudian diakses menggunakan wb["Sheet1"]
.
Time
Pustaka time
adalah pustaka standar Python yang digunakan untuk mengatur waktu dalam program, termasuk membuat jeda antara eksekusi kode.
time.sleep(seconds)
: Fungsi ini menghentikan sementara eksekusi program selama jumlah detik yang ditentukan. Pada kode ini, time.sleep(1)
digunakan untuk menambahkan jeda satu detik antara pengisian setiap data. Ini berguna untuk memberi waktu bagi halaman web untuk memproses data sebelum berlanjut ke data berikutnya.
Setiap pustaka dan modul yang diimpor memiliki peran penting dalam kode ini. selenium
digunakan untuk mengontrol browser dan berinteraksi dengan elemen halaman web, openpyxl
untuk mengambil data dari file Excel dan time
untuk menambahkan jeda waktu yang dibutuhkan. Dengan kombinasi pustaka ini kita dapat membuat otomatisasi yang efektif untuk mengisi formulir web berdasarkan data dari Excel secara otomatis.
Menyiapkan Kode Otomatisasi
Langkah pertama adalah memuat data dari file Excel yang akan digunakan untuk mengisi formulir web. Menggunakan openpyxl
, kita membuka file Excel dan mengakses sheet yang berisi data, lalu mengambil data dari setiap baris untuk diinput ke dalam formulir.
wb = load_workbook(filename="/home/dadandw/dev/data.xlsx")
sheetRange = wb["Sheet1"]
Hasil dari data:
firstname lastname email age salary department
Miranda Ardo miranda@email.com 17 10000 IT
Hasan Basri hasan@email.com 23 10000 Admin
Aji Prastyo aji@email.com 33 20000 Parkir
Irfan Hadikusumah irfan@email.com 21 10000 Lapangan
Nanda Darmawan nanda@email.com 34 30000 Kasir
Siska Renata siska@email.com 43 30000 Lapangan
Jamal Hamadi jamal@email.com 20 10000 Lapangan
Hamadid Darmawan hamadid@email.com 34 30000 Lapangan
Tiara Madani tiara@email.com 24 10000 Parkir
Kuncoro Aji kuncoro@email.com 21 40000 Admin
Rindi Ani rindi@email.com 32 10000 Admin
Sasmita Waluyo sasmita@email.com 32 20000 Gudang
Reynan Alianda reynan@email.com 30 10000 Gudang
Mastur Saputro mastur@email.com 27 20000 Packer
Hanan Maisa hanan@email.com 24 20000 IT
Setelah itu kita inisialisasi WebDriver untuk membuka browser Chrome dan mengakses halaman yang mengandung formulir web yang ingin kita isi. Dalam hal ini, kita menggunakan Selenium untuk membuka halaman “https://demoqa.com/webtables" dan maximize jendela browser.
driver = webdriver.Chrome()
driver.get("https://demoqa.com/webtables")
driver.maximize_window()
Pengisian Formulir Secara Otomatis
Selanjutnya kita masuk ke bagian inti dari program ini, yaitu loop yang mengambil data dari Excel dan menggunakannya untuk mengisi formulir web. Setiap data diambil dari baris yang berbeda di Excel dan diinput ke dalam formulir dengan memanfaatkan fungsi Selenium seperti find_element
dan send_keys
.
i = 2
while i <= len(sheetRange["A"]):
firstname = sheetRange["A"+str(i)].value
lastname = sheetRange["B"+str(i)].value
email = sheetRange["C"+str(i)].value
age = sheetRange["D"+str(i)].value
salary = sheetRange["E"+str(i)].value
department = sheetRange["F"+str(i)].value
try:
add_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "addNewRecordButton"))
)
driver.execute_script("arguments[0].scrollIntoView(true);", add_button)
add_button.click()
driver.find_element(By.ID, 'firstName').send_keys(firstname)
driver.find_element(By.ID, 'lastName').send_keys(lastname)
driver.find_element(By.ID, 'userEmail').send_keys(email)
driver.find_element(By.ID, 'age').send_keys(age)
driver.find_element(By.ID, 'salary').send_keys(salary)
driver.find_element(By.ID, 'department').send_keys(department)
driver.find_element(By.ID, 'submit').click()
except ElementClickInterceptedException:
print(f"Gagal klik tombol 'Add New Record' untuk data ke-{i}!")
except TimeoutException:
print(f"Formulir tidak muncul untuk data ke-{i}!")
except Exception as e:
print(f"Terjadi kesalahan saat memproses data ke-{i}: {e}")
i += 1
Kode di atas menunggu tombol “Add New Record” hingga dapat diklik lalu mengisi formulir dengan data dari Excel dan mengirim formulir. Jika terjadi kesalahan seperti tombol tidak dapat diklik atau formulir tidak muncul dalam waktu yang ditentukan, program akan mencetak pesan kesalahan yang relevan.
Menutup Browser Setelah Semua Data Diinput
Setelah semua data berhasil diinput, kita menutup browser menggunakan driver.quit()
untuk memastikan bahwa tidak ada sesi yang tertinggal terbuka.
driver.quit()
Otomatisasi seperti ini bukan hanya menghemat waktu tetapi juga mengurangi potensi kesalahan manusia. Ketika kita berurusan dengan data dalam jumlah besar, otomatisasi adalah solusi yang sangat praktis. Menggunakan Selenium dan Excel kita dapat memproses data dengan cepat, memastikan bahwa setiap entri diproses dengan cara yang konsisten dan akurat. Selain itu, skrip ini dapat dengan mudah disesuaikan untuk berbagai macam aplikasi web dan jenis formulir. Jika kita baru dalam otomatisasi, program sederhana ini adalah tempat yang baik untuk memulai. Dengan menguasai dasar-dasar ini, kita akan membuka pintu ke berbagai kemungkinan otomatisasi lainnya.
Kode lengkap:
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException, ElementClickInterceptedException
from selenium.webdriver.common.by import By
from openpyxl import load_workbook
import time
# Memuat workbook dan sheet dari Excel
# Mengambil data dari file Excel yang terletak di path berikut
wb = load_workbook(filename="/home/dadandw/dev/data.xlsx")
sheetRange = wb["Sheet1"]
# Inisialisasi WebDriver
# Membuka browser Chrome dan mengakses halaman web yang berisi formulir
driver = webdriver.Chrome()
driver.get("https://demoqa.com/webtables")
driver.maximize_window() # Memaksimalkan jendela browser
driver.implicitly_wait(10) # Menunggu secara implisit hingga 10 detik untuk elemen yang dicari muncul
# Loop melalui baris di sheet Excel
# Memulai iterasi dari baris ke-2 (asumsi baris pertama adalah header)
i = 2
while i <= len(sheetRange["A"]):
# Mengambil nilai dari setiap kolom dalam baris ke-i
firstname = sheetRange["A"+str(i)].value
lastname = sheetRange["B"+str(i)].value
email = sheetRange["C"+str(i)].value
age = sheetRange["D"+str(i)].value
salary = sheetRange["E"+str(i)].value
department = sheetRange["F"+str(i)].value
try:
# Gulir ke elemen dan klik tombol
# Menunggu tombol "Add New Record" hingga dapat diklik
add_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "addNewRecordButton"))
)
driver.execute_script("arguments[0].scrollIntoView(true);", add_button) # Menggulir ke elemen
add_button.click() # Mengklik tombol
print(f"Tombol 'Add New Record' diklik untuk data ke-{i}.")
# Tunggu formulir muncul
# Menunggu hingga formulir yang diperlukan muncul di layar
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//div[@role='dialog']")))
# Isi formulir
# Mengisi setiap kolom formulir dengan data dari file Excel
driver.find_element(By.ID, 'firstName').send_keys(firstname)
driver.find_element(By.ID, 'lastName').send_keys(lastname)
driver.find_element(By.ID, 'userEmail').send_keys(email)
driver.find_element(By.ID, 'age').send_keys(age)
driver.find_element(By.ID, 'salary').send_keys(salary)
driver.find_element(By.ID, 'department').send_keys(department)
driver.find_element(By.ID, 'submit').click() # Mengklik tombol submit
print(f"Data untuk {firstname} {lastname} telah berhasil diinput.")
print("==========================")
except ElementClickInterceptedException:
# Menangani kasus di mana tombol tidak dapat diklik karena elemen lain menghalangi
print(f"Gagal klik tombol 'Add New Record' untuk data ke-{i}!")
except TimeoutException:
# Menangani kasus di mana formulir tidak muncul dalam waktu yang ditentukan
print(f"Formulir tidak muncul untuk data ke-{i}!")
except Exception as e:
# Menangani semua kesalahan lain yang mungkin terjadi
print(f"Terjadi kesalahan saat memproses data ke-{i}: {e}")
# Jeda satu detik antara setiap iterasi
time.sleep(1)
i += 1 # Melanjutkan ke baris berikutnya di Excel
print("Semua data berhasil di input") # Mencetak pesan bahwa semua data telah berhasil diinput
# Tutup WebDriver
# driver.quit() # Menutup jendela browser dan menghentikan sesi WebDriver
Catatan:
- Install Library dari
requirements.txt .
Saat menggunakan kode program Python dengan beberapa library seperti Selenium danopenpyxl
, penting untuk memastikan bahwa semua library yang digunakan sesuai versi yang dibutuhkan agar kompatibel dengan kode. Jika versi library yang terinstal berbeda dapat menyebabkan error yang tidak diinginkan. Oleh karena itu, menyimpan dan menginstall semua dependencies di dalam filerequirements.txt
adalah cara terbaik untuk menjaga keselarasan versi library. - Gunakan
conda environment
untuk pengelolaan yang lebih aman. Ketika bekerja dengan Python, sering kali kita perlu bekerja dengan berbagai project yang mungkin membutuhkan versi library yang berbeda-beda. Di sinilah penggunaan virtual environment sangat penting. Salah satu opsi terbaik untuk membuat environment adalah dengan menggunakan Conda, yang menawarkan pengelolaan environment dan library yang lebih stabil dan aman. - Mengelola dependencies dalam project Python sangat penting untuk memastikan bahwa kode dapat berjalan dengan baik di berbagai sistem. Dengan menggunakan file
requirements.txt
danconda environment
, kita dapat menjaga versi library tetap konsisten, menghindari error, dan mengisolasi environment agar tidak mempengaruhi project lain. Ini juga membuat pengelolaan project lebih terstruktur dan mudah dipelihara, terutama ketika bekerja dengan project otomatisasi dan library seperti Selenium danopenpyxl
.
Semoga panduan ini membantu kita dalam memahami konsep dasar otomatisasi web dan bagaimana mengaplikasikannya untuk meningkatkan produktivitas pekerjaan. Otomatisasi tidak lagi sulit jika kita tahu cara yang tepat dan dengan langkah-langkah yang telah dijelaskan di blog ini, Terima kasih.