Bagaimana cara mengurai hasil pencarian dari situs web setelah menggunakan send_keys (Python) di bilah pencarian?

Jan 05 2021

Pertanyaan saya terkait dengan posting ini: Masukkan kueri di bilah pencarian dan hasil goresan

Saya dapat menjalankan jawaban yang diberikan untuk pertanyaan sebelumnya ini, tetapi saya tidak dapat menghapus data dari situs web yang dinavigasi oleh Chrome dengan mengulang book. Saya hanya menemukan jawaban yang akan menunjukkan cara mengikis data dari ddalam kode saya, tetapi tidak dari hasil pencarian setelah digunakan send_keys.

Saya mencoba mengakses elemen tetapi tidak dapat melakukannya dan saya ingin mengikis data dari situs web yang dihasilkan setelah mencari bookdan kemudian pergi ke putaran putaran berikutnya.

Saya mencoba:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
d = webdriver.Chrome('mypath/chromedriver.exe')
books = ['9780062457738']
for book in books:
  d.get('https://www.bol.com/nl/')
  e = d.find_element_by_id('searchfor')
  f = print(e.send_keys(book, Keys.ENTER))

Saya juga mencoba tanpa print()fungsi tetapi tidak mengembalikan elemen nyata jika saya mengetik f?saya mendapatkan:

Type:        NoneType
String form: None
Docstring:   <no docstring>

Bantuan apa pun tentang cara mengurai data, misalnya penulis buku, judul, atau informasi lain setelah mengirimkan permintaan pencarian sangat diterima!

Jawaban

DebanjanB Jan 05 2021 at 22:26

Untuk ekstrak dan judul buku yaitu The Subtle Art of Tidak Memberikan F * ck Anda perlu untuk menginduksi WebDriverWait untuk visibility_of_element_located()dan Anda dapat menggunakan salah satu dari berikut Locator Strategi :

  • Menggunakan CSS_SELECTOR:

    driver.get("https://www.bol.com/nl/")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.js-confirm-button>span"))).click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#searchfor"))).send_keys("9780062457738")
    driver.find_element_by_css_selector("button[type='submit']").click()
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a.product-title"))).get_attribute("innerHTML"))
    
  • Menggunakan XPATH:

    driver.get("https://www.bol.com/nl/")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Accepteren']"))).click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='searchfor']"))).send_keys("9780062457738")
    driver.find_element_by_xpath("//button[@type='submit']").click()
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[contains(@class, 'product-title')]"))).get_attribute("innerHTML"))
    
  • Keluaran Konsol:

    The Subtle Art of Not Giving a F*ck
    
  • Catatan : Anda harus menambahkan impor berikut:

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