Как анализировать результаты поиска с веб-сайта после использования send_keys (Python) в строке поиска?

Jan 05 2021

Мой вопрос связан с этим сообщением: введите запрос в строку поиска и очистите результаты

Я могу выполнить ответ на этот предыдущий вопрос, но не могу очистить данные с веб-сайта, на который переходит Chrome, с помощью цикла book. Я нашел только ответы, которые показали бы, как очищать данные из dмоего кода, но не из результатов поиска после использования send_keys.

Я попытался получить доступ к элементу, но не могу этого сделать, и я хотел бы очистить данные с полученного веб-сайта после поиска bookи перехода к следующему этапу цикла.

Я пытался:

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()функции, но она не возвращает реального элемента, если я набираю, f?что получаю:

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

Любая помощь в том, как проанализировать данные, например, об авторе книги, заголовке или другой информации после отправки поискового запроса, очень приветствуется!

Ответы

DebanjanB Jan 05 2021 at 22:26

Чтобы извлечь и название книги, то есть Тонкое искусство не трахаться, вам нужно вызвать WebDriverWait для visibility_of_element_located()и вы можете использовать любую из следующих стратегий локатора :

  • Использование 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"))
    
  • Использование 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"))
    
  • Консольный вывод:

    The Subtle Art of Not Giving a F*ck
    
  • Примечание . Вам необходимо добавить следующий импорт:

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