Wie analysiere ich Suchergebnisse von der Website, nachdem ich send_keys (Python) in der Suchleiste verwendet habe?
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 d
in 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 book
ich 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
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