Selenium python 函数 find_elements_by_css_selector() 未返回预期数据

Selenium python function find_elements_by_css_selector() not returning expected data

我是 Selenium 的新手,我正在尝试从 thewhiskeyexchange.com 上的这些波旁威士忌产品卡片中抓取数据(目前只是名称)。我已经在 scrapy shell 中测试了我所有的 css(和 xpath)选择器,所以我知道它们是正确的,但是输出 returns 关于“会话”和元素的编码信息我不明白。列表中的项目数量似乎是正确的,所以也许 Selenium 正在做它应该做的事情,我只是不知道如何将输出转换为我应该使用的东西。如何只从产品卡片中获取名称?

我已经尝试了 Selenium 提供的驱动程序和本地选择器函数,结果相同。 beautiful soup 函数 return 我需要的数据,但是对于我正在处理的项目范围来说,这种方法效率太低了。任何有关如何解决此问题的见解都将不胜感激。

IN[]:
chrome_options = Options()
chrome_options.add_argument("--incognito")
chrome_options.add_argument("--window-size=1920x1080")
chrome_options.binary_location = "C:\Program Files\Google\Chrome\Application\chrome.exe"

IN[]:
driver = webdriver.Chrome(ChromeDriverManager().install())

IN[]:
url = "https://www.thewhiskyexchange.com/c/639/bourbon-whiskey"
driver.get(url)
time.sleep(5) # second delay to improve visual quality
html = driver.page_source
html # HTTP request response object is as expected

IN[]:
els = driver.find_elements_by_css_selector('p.product-card__name')
# local method: els = driver.find_elements(By.CSS_SELECTOR, 'p.product-card__name')
els

OUT[]:
[<selenium.webdriver.remote.webelement.WebElement (session="e521768d8df1dd788b1fda816299b0b5", element="b9384a19-f8c9-46b2-be99-780200dcba99")>,
 <selenium.webdriver.remote.webelement.WebElement (session="e521768d8df1dd788b1fda816299b0b5", element="af76dfa8-b86c-426a-8ad8-30ea904ed11b")>,
 <selenium.webdriver.remote.webelement.WebElement (session="e521768d8df1dd788b1fda816299b0b5", element="58b14e5a-6bc3-443a-807f-ec696e83b096")>, ...
find_elements

returns 一个网络元素列表,而 find_element returns 一个网络元素。

您可以遍历列表并像下面这样提取文本:

IN[]:
els = driver.find_elements(By.CSS_SELECTOR, 'p.product-card__name')
for e in els:
    print(e.text)

此外,请注意 find_elements_by_css_selector 已在较新的 selenium 版本(也称为 Selenium 4)中弃用,因此应改用 find_elements(By.CSS_SELECTOR, "")