Selenium Webdriver:如何通过 class 名称进行抓取?

Selenium Webdriver: How do I grab by class name?

目标:在我的控制台上打印“Eden Ivy”。

我正在关注 the documentation 的 Selenium Webdriver。

以下是感兴趣的行。这是屏幕截图:

HTML:

<a href="/model/77291/eden-ivy" title="Eden Ivy" class="sc-1b6bgon-7 cGUerq">Eden Ivy</a>

我该如何抓取并打印“Eden Ivy”?

我试过了:

name = driver.find_element_by_class_name('sc-1b6bgon')
print(name)

name = driver.find_element_by_class_name('sc-1b6bgon-7 cGUerq')
print(name)

但它们似乎不起作用。我做错了什么?

编辑:我不能在抓取时使用“Eden Ivy”这个词,它必须是按元素。这样我就可以将此功能用于其他名称。

很难使用 class 属性提取 innerHTML,因为它们本质上是动态的。

要打印 innerText Eden Ivy 属性,您可以使用以下任一方法 :

  • 使用 xpathtext 属性:

    print(driver.find_element_by_xpath("//h2[text()]//following::div[1]/span/a").text)
    

理想情况下,您需要为 visibility_of_element_located() 引入 ,您可以使用以下任一方法 :

  • 使用XPATHget_attribute("innerHTML"):

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h2[text()]//following::div[1]/span/a"))).get_attribute("innerHTML"))
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC