【问题标题】:How do I obtain the text inside a label which is inside a span using Selenium with Python?如何使用 Selenium 和 Python 获取跨度内的标签内的文本?
【发布时间】:2021-01-04 16:36:38
【问题描述】:

我想在(用于网络抓取)上使用 Selenium(使用 Python)的网站上的一段代码如下所示 -

<div class="exp_date">
  <span class="uppr_sec">
    <i class="exp_clndr"></i>
    <label> 04 Jan 2021 09:30 AM - 04 Jan 2021 10:30 AM </label>
  </span>
  
  <br>
  
  <div class="clear"></div>
  
  <span class="lwr_sec">
    <i class></i>
    <label>Hosted By Some Random Person</label>
  </span>

</div>

我想在两个跨度中打印包含在 &lt;label&gt; 标记中的文本,即“2021 年 1 月 4 日上午 9:30 - 2021 年 1 月 4 日上午 10:30”和“由某个随机人主持” Python 控制台,使用 Selenium。但是,我不确定这样做的步骤,因为标签嵌套在它们各自的 span 中,它们嵌套在一个 div 中。

有人可以帮我解决需要的代码吗? (在 Python 中)

【问题讨论】:

  • 你有没有尝试过?遇到什么问题?由于页面是动态的,是否也必须使用 Selenium?

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

提取和打印文本,例如2021 年 1 月 4 日上午 9:30 - 2021 年 1 月 4 日上午 10:30 使用 Selenium,您可以使用以下任一 Locator Strategies

  • 使用css_selectorget_attribute("innerHTML")

    print([my_elem.get_attribute("innerHTML") for my_elem in driver.find_elements_by_css_selector("div.exp_date > span.uppr_sec label")])
    
  • 使用xpathtext属性:

    print([my_elem.text for my_elem in driver.find_elements_by_xpath("//div[@class='exp_date']/span[@class='uppr_sec']//label")])
    

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

  • 使用CSS_SELECTORget_attribute("innerHTML")

    print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.exp_date > span.uppr_sec label")))])
    
  • 使用XPATHtext属性:

    print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='exp_date']/span[@class='uppr_sec']//label")))])
    
  • 注意:您必须添加以下导入:

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

结尾

链接到有用的文档:

【讨论】:

  • 这正是我需要的一切,非常感谢!不过,我还有另一个查询 - 我还必须从给定网页的源 HTML 代码中识别以“abc.com”开头的链接,我打算为此使用wd.page_source(wd 是 webdriver 对象)获取页面的 HTML 源代码,然后使用 Python RegEx 搜索以“abc.com”开头的字符串。是否有特定于 Selenium 的解决方法,而不使用 RegEx(类似于搜索机制)?提前致谢!
  • @PranavN 听起来像是一个完全不同的问题。你能根据你的新要求提出一个新问题吗? Stackoverflow 贡献者将很乐意为您提供帮助。
猜你喜欢
  • 2017-11-09
  • 2019-06-12
  • 2021-09-17
  • 2014-09-23
  • 2020-09-17
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
相关资源
最近更新 更多