在搜索栏中使用send_keys(Python)后,如何解析来自网站的搜索结果?

在搜索栏中使用send_keys(Python)后,如何解析来自网站的搜索结果?,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,我的问题与这篇文章有关: 我能够执行前一个问题的答案,但无法通过循环书籍从Chrome导航的网站上获取数据。在我的代码中,我只找到了显示如何从d中提取数据的答案,但在使用send\u键后,我没有从搜索结果中提取数据 我试图访问该元素,但无法访问,我想在搜索book并进入下一轮循环后,从生成的网站中获取数据 我试过: from selenium import webdriver from selenium.webdriver.common.keys import Keys from seleniu

我的问题与这篇文章有关:

我能够执行前一个问题的答案,但无法通过循环
书籍
从Chrome导航的网站上获取数据。在我的代码中,我只找到了显示如何从
d
中提取数据的答案,但在使用
send\u键后,我没有从搜索结果中提取数据

我试图访问该元素,但无法访问,我想在搜索
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>
类型:非类型
字符串形式:无
文档字符串:

非常欢迎在提交搜索查询后,提供有关如何解析书籍作者、书名或其他信息等数据的任何帮助

要提取和记录标题,即不给出F*ck的微妙艺术您需要为位于()的元素的可见性进行归纳,您可以使用以下任一方法:

  • 使用
    CSS\u选择器

    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
    

要提取和出版书名,即不给出F*ck的微妙艺术您需要对位于()的元素的可见性进行诱导,您可以使用以下任一方法:

  • 使用
    CSS\u选择器

    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
    

您是否等待结果?加载查询可能需要一段时间,在填充之前读取这些元素会产生空结果。我不这么认为@nagyl。我尝试了
时间。睡眠(2)
但仍然没有得到正确的结果。您是否等待结果?加载查询可能需要一段时间,在填充之前读取这些元素会产生空结果。我不这么认为@nagyl。我尝试了
时间。睡眠(2)
但仍然没有得到正确的结果。非常感谢!这是非常有用的@DebanjanB,解决了我的问题:)非常感谢!这非常有用@DebanjanB并解决了我的问题:)