首页 > 解决方案 > 在 Selenium + Python 中使用重复类查找元素

问题描述

我正在使用 Selenium + Python 在 Battlefy 页面上抓取匹配结果,以便以后进行操作并输入数据库。我正在尝试使用 Selenium 抓取团队的名称和结果,因为动态加载 JS 需要我使用无头浏览器。但是,我正在尝试使用班级名称获取每个大学的文本,但是使用 Selenium 的find_elements_by_class_name方法似乎不起作用。

网页:https ://battlefy.com/college-league-of-legends/2020-north-conference/5de98dd4196d1311d9e6edbd/stage/5e23b6e395e72856dac06997/bracket/1

当前代码:

>>> chrome_path = r"C:\Users\...\chromedriver.exe"
>>> driver = webdriver.Chrome(chrome_path)
>>> driver.get("https://battlefy.com/college-league-of-legends/2020-north-conference/5de98dd4196d1311d9e6edbd/stage/5e23b6e395e72856dac06997/bracket/1")
>>> team = driver.find_elements_by_class_name("team-name overflow-ellipsis float-right")
>>> for item in teams:
    print(item.text)

它不打印任何内容并返回一个空数组。我一定做错了什么。当班级名称覆盖每个团队名称的文本时,如何抓取它?

标签: pythonseleniumweb-scrapingselenium-chromedriver

解决方案


team-name overflow-ellipsis float-right是类的组合,当您使用find_elements_by_class_name/find_element_by_class_name方法时,定位器将在内部转换为 CSS 但 selenium 库。因此,您必须用 . 掩盖所有空格(空白).

试试下面。

team = driver.find_elements_by_class_name("team-name.overflow-ellipsis.float-right")

编辑1:

这是 selenium 的实现,我们可以在其中看到定位器是预先添加的,.并且它在By.CSS_SELECTOR内部使用。所以,我们不必.为第一个类名添加。

在此处输入图像描述


推荐阅读