【问题标题】:How to include regex in the css selector in python selenium如何在 python selenium 的 css 选择器中包含正则表达式
【发布时间】:2022-01-10 21:00:36
【问题描述】:

我正在尝试使用 CSS 选择器提取文本。由于变量本质上是动态的,因此它们会不断更新。

#profileCard-ACoAABI4A30BKLei-DtaS6B6vQo-3ejw-nzI1W8-EDUCATION-en-US 

this is a CSS selector

driver.find_element_by_css_selector('#profileCard-ACoAABI4A30BKLei-DtaS6B6vQo-3ejw-nzI1W8-EDUCATION-en-US').text

x_path = //*[@id="profileCard-ACoAABI4A30BKLei-DtaS6B6vQo-3ejw-nzI1W8-EDUCATION-en-US"]
# here i tried to apply the regex
driver.find_element_by_xpath("//*[ends-with(@id,'EDUCATION-en-US')]") 

但我收到一个错误,即“InvalidSelectorException”。
有什么方法可以不出错地获取数据?

'ACoAABI4A30BKLei-DtaS6B6vQo-3ejw-nzI1W8' 这个路径会不断更新。 '#profileCard', 'EDUCATION-en-US' 不会有任何变化

任何解决问题的帮助或线索都会非常有帮助。提前致谢

【问题讨论】:

    标签: python selenium css-selectors selenium-chromedriver


    【解决方案1】:

    这应该可以满足您的需求:

    driver.find_element_by_css_selector('[id^="profileCard-"][id$="-EDUCATION-en-US"]').text
    

    ^ 表示 id 应该以什么开头。

    $ 表示id 应该以什么结尾。

    【讨论】:

      【解决方案2】:

      对于 id 属性的值,例如:

      #profileCard-ACoAABI4A30BKLei-DtaS6B6vQo-3ejw-nzI1W8-EDUCATION-en-US
      

      xpath 不支持 ends-with()。相反,您可以使用以下任一选项:

      • 使用xpath

        driver.find_element(By.XPATH, "//*[starts-with(@id, 'profileCard') and contains(@id, 'EDUCATION-en-US')]").text
        
      • 使用css_selector

        driver.find_element(By.CSS_SELECTOR, "[id^='profileCard'][id$='EDUCATION-en-US']").text
        

      【讨论】:

      • 假设如果我们有像这样的Xpath = //*[@id="ember265"]/div/div/div[1] ,其中数字是动态的,这是 XPath 独立于类和 id。那么在这里实现正则表达式的方法是什么
      • ember* 表示动态元素。考虑到这一点,您必须构建定位器。
      • 目前我正在使用这个。 driver.find_element_by_xpath("//*[contains(@id,'ember')]/div/div/div[1]").text 但它返回一个空列表。
      • 我们在Selenium room 讨论这个问题。
      猜你喜欢
      • 1970-01-01
      • 2012-05-14
      • 2012-04-12
      • 2011-10-29
      • 2016-01-11
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多