首页 > 解决方案 > 使用 Selenium 从多个同名类中提取标签的所有第一个实例

问题描述

我正在运行一个 Selenium 脚本来从多个同名类中抓取所有第一个 h3 实例,使用索引 [0] 来提取第一个 h3(共 4 个)。我的脚本似乎运行良好,但它返回一个空数组。我试过 WebDriverWait 解决方案无济于事。

这是我目前所拥有的:

url = 'https://www.riversidemedgroup.com/riverside-urgent-care/'

data = []

driver = webdriver.Chrome(executable_path='/Library/Frameworks/Python.framework/Versions/3.9/bin/chromedriver')
driver.get(url)

centers = driver.find_elements_by_xpath("//h3[contains(@class,'elementor-widget-container')][0]")
for center in centers:
     data.append({
     "Center Name": center
     })
print(data)
driver.close()

无法弄清楚我哪里出错了。非常感谢任何建议!

标签: pythonselenium

解决方案


为了简单起见,我从 XPath 切换到 CSS 选择器。下面的代码应该可以正常工作。

from bs4 import BeautifulSoup
from selenium import webdriver
import time
url = 'https://www.riversidemedgroup.com/riverside-urgent-care/'

data = []

driver = webdriver.Chrome()
driver.get(url)

centers = driver.find_elements_by_css_selector(".elementor-widget-container > h3:first-of-type")
for center in centers:
     data.append({
     "Center Name": center.text
     })
print(data)
driver.close()

输出:

[{'Center Name': 'Bloomfield, NJ Urgent Care'}, 
{'Center Name': 'Cedar Knolls, NJ Urgent Care'}, 
{'Center Name': 'Cherry Hill, NJ Urgent Care'}, 
{'Center Name': 'Cinnaminson, NJ Urgent Care'}, 
{'Center Name': 'East Brunswick, NJ Urgent Care'}, 
{'Center Name': 'Ewing, NJ Urgent Care'}, 
{'Center Name': 'Hackettstown, NJ Urgent Care'}, 
{'Center Name': 'Hamilton, NJ Urgent Care'}, 
{'Center Name': 'Hazlet, NJ Urgent Care'}, 
{'Center Name': 'Howell, NJ Urgent Care'}, 
{'Center Name': 'Ledgwood, NJ Urgent Care'}, 
{'Center Name': 'Linden, NJ Urgent Care'}, 
{'Center Name': 'Lodi, NJ Urgent Care'}, 
{'Center Name': 'Mount Ephraim, NJ Urgent Care'}, 
{'Center Name': 'Nutley, NJ Urgent Care'}, 
{'Center Name': 'Pennsville, NJ Urgent Care'}, 
{'Center Name': 'Rockaway, NJ Urgent Care'}, 
{'Center Name': 'Runnemede, NJ Urgent Care'}, 
{'Center Name': 'Springfield, NJ Urgent Care'}, 
{'Center Name': 'Totowa, NJ Urgent Care'}, 
{'Center Name': 'Vineland South, NJ Urgent Care'}, 
{'Center Name': 'Vineland, NJ Urgent Care'}, 
{'Center Name': 'Wall, NJ Urgent Care'}, 
{'Center Name': 'Watchung, NJ Urgent Care'}, 
{'Center Name': 'Willingboro, NJ Urgent Care'}, 
{'Center Name': 'Woodbury, NJ Urgent Care'}, 
{'Center Name': ''}, 
{'Center Name': 'Derby, CT Urgent Care'}, 
{'Center Name': 'Meriden, CT Urgent Care'}, 
{'Center Name': 'Middletown, CT Urgent Care'}]

推荐阅读