【问题标题】:Selenium Webdriver: How do I grab by class name?Selenium Webdriver:如何按类名抓取?
【发布时间】:2021-12-26 03:15:34
【问题描述】:

目标:在我的控制台上打印“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”这个词,它必须是按元素。这样我就可以将此函数用于其他名称。

【问题讨论】:

    标签: python selenium selenium-webdriver webdriverwait getattribute


    【解决方案1】:

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

    要打印innerText Eden Ivy 属性,您可以使用以下任一Locator Strategies

    • 使用xpathtext属性:

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

    理想情况下,您需要为visibility_of_element_located() 诱导WebDriverWait,您可以使用以下任一Locator Strategies

    • 使用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
      

    【讨论】:

    • 谢谢,但不能具体到这个名字。换句话说,“grabbing”不能包含“Eden Ivy”这个词,所以我也可以将它用于其他名称。可能应该提到这一点。
    • 查看答案更新,如果有任何问题,请告诉我。
    • Fam 感谢您的回答。让我失望的是你有“a[title='Eden Ivy']”我试图避免使用“Eden Ivy”这个词,这样我就可以对其他名字使用相同的函数。我不确定我是否解释正确。例如,我将相同的函数复制粘贴到不同的页面并打印“Michael Scott”
    • 查看更新的答案并让我知道状态。
    • Fam XPATH 具有特定于此页面的“'Budap-Assed”。我不认为我解释正确。我想要的是:您使用上面页面中的功能,它会打印“Eden Ivy”。您在同一网站的不同页面中使用相同的功能,它会打印“Michael Scott”。这不可能吗?对不起,我很笨。
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2022-06-11
    • 1970-01-01
    • 2022-01-14
    • 2020-07-11
    • 2014-02-22
    • 1970-01-01
    • 2015-01-18
    相关资源
    最近更新 更多