如何处理html代码中类名多行问题

问题描述 投票:0回答:1

我需要查找 html 中具有特定类名的所有元素。但由于某种原因,类名由多行和多个空格组成。这是我从浏览器中的开发工具复制的确切类名:

            ll-sets-words__row
            false
        

我尝试过 selenium 和 BeautifulSoup 来按类名查找这些元素,但这不起作用。但是,如果我尝试通过 css 选择器或 xpath 查找这些元素,它会恰好找到一个元素,但我需要所有这些元素,这就是为什么我需要通过类名查找它们,但是那个奇怪的多行类名似乎不行。看这张图片 Html code

这是我的代码示例:

    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 来查找所有元素

python html classname
1个回答
0
投票

类名实际上并没有分成多行,而是包含空格,用于分隔同一元素的多个类。例如,类名 ll-sets-words__row 表示该元素属于两个类:ll-sets-words__row 和 false。要选择此元素,您可以根据您的需要使用这些类中的任何一个,或同时使用它们。

© www.soinside.com 2019 - 2024. All rights reserved.