¿Cómo analizar los resultados de búsqueda del sitio web después de haber usado send_keys (Python) en la barra de búsqueda?
Mi pregunta está relacionada con esta publicación: ingrese la consulta en la barra de búsqueda y raspe los resultados
Puedo ejecutar la respuesta dada a esta pregunta anterior, pero no puedo extraer datos del sitio web al que navega Chrome mediante el bucle book
. Solo encontré respuestas que mostrarían cómo extraer datos de d
mi código, pero no del resultado de la búsqueda después de haber usado send_keys
.
Intenté acceder al elemento pero no puedo hacerlo y me gustaría extraer los datos del sitio web resultante después de buscar book
y luego pasar a la siguiente ronda del ciclo.
Lo intenté:
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))
También probé sin la print()
función pero no devuelve ningún elemento real si escribo f?
obtengo:
Type: NoneType
String form: None
Docstring: <no docstring>
¡Cualquier ayuda sobre cómo analizar los datos de, por ejemplo, el autor del libro, el título u otra información después de haber enviado una consulta de búsqueda es muy bienvenida!
Respuestas
Para extraer y título del libro es decir, el arte sutil de no dar un F * ck usted necesita para inducir WebDriverWait para el visibility_of_element_located()
y se puede utilizar cualquiera de las siguientes estrategias de localización :
Utilizando
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"))
Utilizando
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"))
Salida de consola:
The Subtle Art of Not Giving a F*ck
Nota : Debe agregar las siguientes importaciones:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC