Wie analysiere ich Suchergebnisse von der Website, nachdem ich send_keys (Python) in der Suchleiste verwendet habe?

Jan 05 2021

Meine Frage bezieht sich auf diesen Beitrag: Geben Sie die Abfrage in die Suchleiste ein und kratzen Sie die Ergebnisse

Ich kann die Antwort auf diese frühere Frage ausführen, aber keine Daten von der Website kratzen, zu der Chrome durch die Schleife navigiert book. Ich habe nur Antworten gefunden, die zeigen, wie Daten din meinem Code entfernt werden, aber nicht aus dem Suchergebnis, nachdem ich sie verwendet habe send_keys.

Ich habe versucht, auf das Element zuzugreifen, kann dies jedoch nicht. Ich möchte die Daten von der resultierenden Website entfernen, nachdem bookich nach der nächsten Runde der Schleife gesucht und dann fortgefahren bin .

Ich habe es versucht:

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

Ich habe es auch ohne die print()Funktion versucht, aber es gibt kein echtes Element zurück, wenn ich Folgendes f?eingebe:

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

Jede Hilfe zum Analysieren der Daten, beispielsweise des Autors des Buches, des Titels oder anderer Informationen nach dem Absenden einer Suchanfrage, ist sehr willkommen!

Antworten

DebanjanB Jan 05 2021 at 22:26

Um Titel zu extrahieren und zu buchen, dh die subtile Kunst, kein F * ck zu geben , müssen Sie WebDriverWait für das induzieren visibility_of_element_located()und können eine der folgenden Locator-Strategien verwenden :

  • Verwenden von 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"))
    
  • Verwenden von 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"))
    
  • Konsolenausgabe:

    The Subtle Art of Not Giving a F*ck
    
  • Hinweis : Sie müssen folgende Importe hinzufügen:

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