Come analizzare i risultati di ricerca dal sito Web dopo aver utilizzato send_keys (Python) nella barra di ricerca?
La mia domanda è correlata a questo post: inserisci la query nella barra di ricerca e scorri i risultati
Sono in grado di eseguire la risposta data a questa precedente domanda, ma non sono in grado di estrarre i dati dal sito Web a cui Chrome naviga eseguendo il looping book
. Ho trovato solo risposte che mostrerebbero come estrarre i dati dal d
mio codice, ma non dal risultato della ricerca dopo averlo utilizzato send_keys
.
Ho provato ad accedere all'elemento ma non riesco a farlo e vorrei raschiare i dati dal sito Web risultante dopo aver cercato book
e quindi andare al ciclo successivo del ciclo.
Ho provato:
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))
Ho provato anche senza la print()
funzione ma non restituisce alcun elemento reale se digito f?
ottengo:
Type: NoneType
String form: None
Docstring: <no docstring>
Qualsiasi aiuto su come analizzare i dati, ad esempio, dell'autore del libro, del titolo o di altre informazioni dopo aver inviato una query di ricerca è molto gradito!
Risposte
Per estrarre e prenotare il titolo, ad esempio The Subtle Art of Not Giving a F * ck, devi indurre WebDriverWait per il visibility_of_element_located()
e puoi utilizzare una delle seguenti strategie di localizzazione :
Utilizzando
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"))
Utilizzando
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"))
Uscita console:
The Subtle Art of Not Giving a F*ck
Nota : devi aggiungere le seguenti importazioni:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC