我可以在Python和Selenium中使用正则表达式来查找元素吗?

我需要单击一个下拉列表,然后单击其中的隐藏元素。 html将由javascript生成,但我不知道ID或类名,但我知道它中将包含一个短语。我可以通过正则表达式查找和元素,然后用硒单击它吗?

评论
  • 莫~大宝
    莫~大宝 回复

    You can use import re to perform regex functions. The snippet below looks through a table and grabs the text between the <b></b> tags in the first cell if the row has 3 cells in it.

    import re
    from lxml import html, etree
    
    tree = html.fromstring(browser.page_source)
    party_table = tree.xpath("//table")
    assert len(party_table) == 1
    
    CURRENT_PARTIES = []
    for row in party_table[0].xpath("tbody/tr"):
        cells = row.xpath("td")
        if len(cells) != 3:
            continue
    
        if cells[1].text == "represented by":
            match = re.search(r'<b>(.+?)</b>', etree.tostring(cells[0]), re.IGNORECASE)
            print "MATCH: ", match
    
  • Jay
    Jay 回复

    您不能简单地使用内置的Selenium Webdriver定位器进行基于正则表达式的搜索,但是您可以通过多种操作来帮助您:

    还有CSS选择器,用于元素属性的部分匹配:

    a[href*=desiredSubstring]  # contains
    a[href^=desiredSubstring]  # starts-with
    a[href$=desiredSubstring]  # ends-with
    

    而且,您总是可以找到比所需更多的元素,并稍后在Python中将其过滤掉,例如:

    import re
    
    pattern = re.compile(r"^Some \w+ text.$")
    
    elements = driver.find_elements_by_css_selector("div.some_class")
    for element in elements:
        match = pattern.match(element.text)
        if match:
            print(element.text)