我需要查找 html 中具有特定类名的所有元素。但由于某种原因,类名由多行和多个空格组成。这是我从浏览器中的开发工具复制的确切类名:
ll-sets-words__row
false
我尝试过 selenium 和 BeautifulSoup 来按类名查找这些元素,但这不起作用。但是,如果我尝试通过 css 选择器或 xpath 查找这些元素,它会恰好找到一个元素,但我需要所有这些元素,这就是为什么我需要通过类名查找它们,但是那个奇怪的多行类名似乎不行。看这张图片
这是我的代码示例:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import pickle
from bs4 import BeautifulSoup
url1 = 'https://lingualeo.com/'
url2 ='https://lingualeo.com/ru/dictionary/vocabulary/my'
s = Service('C:\\Users\\user\\Desktop\\chromedriver-
win64\\chromedriver.exe')
options = webdriver.ChromeOptions()
options.add_argument('--excludeSwitches')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--disable-blink-
features=AutomationControlled')
browser = webdriver.Chrome(service=s, options=options)
browser.maximize_window()
wait = WebDriverWait(browser, 600)
browser.get(url1)
time.sleep(7)
cookies = pickle.load((open('lingua_cookies.pkl', 'rb')))
for cookie in cookies:
browser.add_cookie(cookie)
time.sleep(2)
browser.get(url2)
time.sleep(10)
class_name = """
ll-sets-words__row
false
"""
try:
entire_dict = browser.find_element(By.CLASS_NAME, 'll-page-
vocabulary__sets-words__table')
print('it worked here1')
words = entire_dict.find_elements(By.CLASS_NAME, class_name)
for e in words:
print(e.text)
except:
print('error')
browser.quit()
browser.quit()
它在分配变量“words”的行停止工作。但是,如果我用 By.CSS_SELECTOR 或 By.XPATH 替换搜索,它会起作用,但它只会找到一个元素。这就是为什么我仍然需要使用 CLASS_NAME 来查找所有元素
类名实际上并没有分成多行,而是包含空格,用于分隔同一元素的多个类。例如,类名 ll-sets-words__row 表示该元素属于两个类:ll-sets-words__row 和 false。要选择此元素,您可以根据您的需要使用这些类中的任何一个,或同时使用它们。