Arama çubuğunda send_keys (Python) kullandıktan sonra web sitesindeki arama sonuçları nasıl ayrıştırılır?

Jan 05 2021

Sorum şu gönderiyle ilgili: Arama çubuğuna sorgu girin ve sonuçları kazıyın

Bu önceki soruya verilen cevabı uygulayabiliyorum, ancak Chrome'un dönerek gezindiği web sitesinden veri kazıyamıyorum book. Yalnızca kodumdaki verileri nasıl kazıyacağımı gösteren yanıtlar buldum d, ancak kullandıktan sonra arama sonucundan değil send_keys.

Öğeye erişmeyi denedim, ancak bunu yapamıyorum ve aradıktan bookve ardından döngünün bir sonraki turuna geçtikten sonra elde edilen web sitesindeki verileri kazımak istiyorum .

Denedim:

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))

print()İşlevsiz de denedim ama şunu yazarsam hiçbir gerçek öğe döndürmez f?:

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

Örneğin, bir arama sorgusu gönderdikten sonra kitabın yazarının, başlığın veya diğer bilgilerin yazarının verilerinin nasıl ayrıştırılacağına dair her türlü yardıma açığız!

Yanıtlar

DebanjanB Jan 05 2021 at 22:26

Bir F * ck Vermemenin İnce Sanatı gibi başlıkları ayıklamak ve ayırmak için WebDriverWait'i teşvik etmeniz gerekir visibility_of_element_located()ve aşağıdaki Konum Belirleme Stratejilerinden birini kullanabilirsiniz :

  • Kullanarak 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"))
    
  • Kullanarak 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"))
    
  • Konsol Çıkışı:

    The Subtle Art of Not Giving a F*ck
    
  • Not : Aşağıdaki içe aktarmaları eklemeniz gerekir:

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