【问题标题】:How to retrieve text from HTML to Python using Selenium如何使用 Selenium 将文本从 HTML 检索到 Python
【发布时间】:2021-01-09 05:43:38
【问题描述】:

您好,我知道已经有与此相关的问题,但我没有足够的经验来解决这个问题。我正在尝试用 Python 编写一个简单的脚本,该脚本会定期检查 DMV 网站上的最早可用日期。在我居住的地方,DMV 已经备份了几个月,并且在驾驶考试失败后 - 我想在有人取消他们的约会时找到最早的可用日期。

无论如何,这是我要从中获取的 HTML:

          <div _ngcontent-glu-c19="" class="department-appointment-header">Earliest date:</div>
          <br _ngcontent-glu-c19="">
          <div _ngcontent-glu-c19="">
            Monday
          </div>
          <div _ngcontent-glu-c19="">
             May 31st
          </div>
        </div>

现在,我正在尝试获取 5 月 31 日的日期,以便我可以将其与最早日期变量进行比较,当日期比现有日期更早时,该变量会不断更新。最终我会让 Python 通过文本通知我。 我不知道如何检索 May 31st 元素并将其分配给字符串变量或列表,因此我可以将月/日转换为 1 - 365 之间的整数em>。

请我是 Selenium 的新手,我有一段时间没有接触过 Python,我已经很生疏了,我们将不胜感激。如果您需要更多 HTML 代码,请告诉我,我会添加更多,我只是不想填满整个页面。

【问题讨论】:

  • 您好,您还有问题吗?

标签: python selenium web-scraping xpath webdriverwait


【解决方案1】:

尝试:

date = driver.find_element_by_xpath("//div[@_ngcontent-glu-c19='']).text

我不确定它是否会起作用,但值得一试

【讨论】:

  • 不是一个有效的 XPath 表达式
  • 抱歉,单引号而不是双引号
  • NoSuchElementException: 消息:没有这样的元素:无法找到元素:{"method":"xpath","selector":"//div[@_ngcontent-glu-c19=""]" }
  • 嘿,我想通了,我用 date = driver.find_element_by_xpath("//div[2]/div/div/div[2]/div[3 ]").文本
  • 是的,但是应该避免使用这样的 xpath,它们是不可重现的,如果有任何变化就会中断
【解决方案2】:

要打印文本 May 31st,您可以使用以下任一Locator Strategies

  • 使用xpathclass属性:

    print(driver.find_element(By.XPATH, "//div[@class='department-appointment-header']//following-sibling::div[2]").text)
    
  • 使用xpathtextContext

    print(driver.find_element(By.XPATH, "//div[text()='Earliest date:']//following-sibling::div[2]").text)
    

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

  • 使用XPATHclass 属性:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='department-appointment-header']//following-sibling::div[2]"))).text)
    
  • 使用XPATHtextContext

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[text()='Earliest date:']//following-sibling::div[2]"))).text)
    
  • 注意:您必须添加以下导入:

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

您可以在How to retrieve the text of a WebElement using Selenium - Python找到相关讨论

【讨论】:

    猜你喜欢
    • 2019-08-09
    • 2020-10-08
    • 2021-02-09
    • 2012-07-15
    • 2020-11-05
    • 2020-09-06
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    相关资源
    最近更新 更多