My Blog

ByPass Button "load more" dengan selenium

13 Oct 2022

Pada tulisan kali ini saya akan membagikan pengalaman saya membuat web scraper menggunakan selenium dan python, dimana kendala yang saya hadapi dalam melakukan scraping tersebut adalah tombol “load more” yang membuat saya tidak bisa mendapatkan data dari web tersebut. tujuan saya melakukan scraping adalah untuk mendapat postingan sesuai keyword yang sudah saya tentukan.

untuk mengetahui apa itu selenium bisa membaca dokumentasi di web berikut Selenium.dev

  1. Membuat file python, disini saya beri nama scrapper.py
  2. Menambahkan selenium pada project kita dengan command

    pip install selenium
    


  3. Selanjutnya mengimport selenium ke dalam file python kita

    scrapper.py

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from webdriver_manager.chrome import ChromeDriverManager
    


  4. Menambahkan list keyword dan web yang sudah saya kumpulkan sebelumnya

    scrapper.py

    keyword = open("wordlist/keywords.txt", "r").read().splitlines()
    source = open("wordlist/web_loadmore.txt", "r").read().splitlines()
    
  5. Selanjutnya menambahkan browser driver, disini saya menggunakan chrome jadi implementasinya seperti berikut

    scrapper.py

     driver = webdriver.Chrome(ChromeDriverManager().install())
    


  6. Sebelumnya kita sudah harus tau nama class dari button load more dari web yang akan di scraping, caranya bisa menggunakan inspect element

  7. membuat sebuah fungsi untuk melakukan scraping dan hasil dari scraping tersebut di add ke dalam file res.txt

    scrapper.py

    driver = webdriver.Chrome(ChromeDriverManager().install())
     for key in keyword:
         for src in source:
             driver.get("{}?s={}".format(src,key))
             while True:
                 try:
                     load_more_button = WebDriverWait(driver, 10).until(
                         #td_ajax_load_more adalah nama class dari tombol loadmore
                         EC.visibility_of_element_located((By.CLASS_NAME, "td_ajax_load_more"))
                     )
                     #melakukan scroll down
                     driver.execute_script("arguments[0].scrollIntoView();", load_more_button)
                     #melakukan click tombol load more
                     load_more_button.click()
                     #get all title
                     soup = BeautifulSoup(driver.page_source, "html.parser")
                     titles = soup.find_all("div", class_="tdb_module_loop")
                     for title in titles:
                         print(src)
                         print(title.find("h3").text)
                         with open("res.txt", "a") as f:
                             f.write("Title : "+title.find("h3").text + "\n")
                             f.write("Link : "+title.find("a")["href"] + "\n")
                             f.write("Source : "+src + "\n")
                             f.write("Keyword : "+key + "\n")
                             f.write("============================================="+ "\n")
                 except:
                     break
    
  8. Selanjutnya menjalankan programnya dengan menuliskan di terminal
    python scrapper.py
    


    untuk melihat full source code nya silahkan kunjungi github saya, di link berikut

    scrapper.py

    sekian tulisan saya tentang cara bagaimana bypass tombol load more, di sebuah web menggunakan selenium dan python, mohon maaf jika banyak kekurangan dalam tulisan saya, terima kasih banyak