【问题标题】:Python Selenium: How to wait until href attribute contains a specific string?Python Selenium:如何等到 href 属性包含特定字符串?
【发布时间】:2020-07-03 08:03:06
【问题描述】:

例如,我在 Selenium 中打开页面 https://example.com/page-1/,寻找包含 domain.com 的特定链接。现在我正在使用sleep(20) 来确保页面已完全加载。但我想知道我是否可以将WebDriverWait 不仅用于标签的存在,还用于它的包含存在。还没有找到任何解决方案...

【问题讨论】:

  • 是的,你可以在 lambda 表达式中做到这一点
  • 您能详细说明一下吗?我还不熟悉 lambda 表达式。

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

你可以试试这样,我假设你使用的是 Firefox,但逻辑是一样的:

firefox = webdriver.Firefox()
firefox.get('https://example.com/page-1/')
#wait for a maximum of 60 seconds in this example
wait = WebDriverWait(firefox, 60)
domain = "domain.com"
wait.until(lambda x: x.find_element_by_css_selector(f"a[href*='{domain}']"))

【讨论】:

    【解决方案2】:

    要等待 href 属性的 WebElement 包含特定字符串,可以将 WebDriverWait 诱导为 visibility_of_element_located(),并且可以使用以下任一 Locator Strategies

    • domain.com的全匹配:

      • 使用CSS_SELECTOR

        element = WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a[href='domain.com']")))
        
      • 使用XPATH

        element = WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[@href='domain.com']")))
        
    • domain.com的部分匹配:

      • 使用CSS_SELECTOR:

        element = WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a[href*='domain.com']")))
        
      • 使用XPATH

        element = WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[contains(@href, 'domain.com')]")))
        
    • 注意:您必须添加以下导入:

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

    【讨论】:

      猜你喜欢
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 2016-09-20
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多