【问题标题】:Python selenium ignore text format?Python selenium 忽略文本格式?
【发布时间】:2021-08-23 21:52:04
【问题描述】:

当我尝试匹配我的 name 字符串和 web 元素中的名称之间的名称时遇到问题。

例如:

我的namestring 中的名称格式(从网站上抓取):Mcburnie

webelement 中的名称:McBurnie

由于 web 元素的格式不同(大写 B),Xpath 匹配失败。

这是我的代码:

choose_player = init_webdriver.wait.until(
                            EC.element_to_be_clickable(
                                (
                                    By.XPATH,
                                    (
                                        "//span[@class='btn-text' and contains(text(),'"
                                        + name # = Mcburnie in our example
                                        + "')]"
                                    ),
                                )
                            )
                        ) 

只要名称是标准的,例如“Benny”或“Smith”,就可以了。 我还用.title() 格式化了我的name 字符串,所以我先得到一个大写字母,但我不知道如何处理上面的这种情况。

知道当文本格式不同时,如何让元素被点击吗?

【问题讨论】:

  • 以下答案是否解决了您的问题?如果是,请接受/投票,这样这个帖子就不会无人回答了。

标签: python html selenium


【解决方案1】:

试试这个:

choose_player = init_webdriver.wait.until(
  EC.element_to_be_clickable((
    By.XPATH, (
      "//span[@class='btn-text' and contains(lower-case(.),'"
      + name.lower() # = Mcburnie in our example
      + "')]"
      ),
    )
  )
 ) 

【讨论】:

  • 不幸的是无法正常工作。另外,当我将 (.) 更改为 text()
【解决方案2】:

你可以尝试使用translate函数。

确切值:

"//span[@class='btn-text' and translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')='" +name.lower() +"']"

或者使用contains函数组合:

"//span[@class='btn-text' and contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '" +name.lower() +"')]"

【讨论】:

    【解决方案3】:

    你也可以使用python替换,

    name = 'Mcburnie'
    new_name = name.replace('b', 'B')
    print(new_name)
    

    应该打印McBurnie,然后你可以将它解析到xpath中。如果你可以在 xpath 中有一个 or 子句,比如:

    //*[contains(text(),'Mcburnie') or contains(text(), 'McBurnie')]
    

    你可以有n个or子句。

    更新 1:

    您可以这样做,当您从 UI 中抓取 Web 元素时,尝试将其存储在变量中:

    var = driver.find_element(By.XPATH, "some xpath to get the UI element").text
    ui_text_in_lower_case = var.lower()
    
    your_string_in_local = "soMe stringSS"
    local_text_in_lower_case = your_string_in_local.lower()
    

    另外,如果你可以有一个没有文本的 xpath,而不是 some xpath to get the UI element,则不要对文本进行硬编码,根本不推荐这样做。

    【讨论】:

    • 这个名字只是一个例子,它可以是任何名字,所以我不能硬编码它。这个问题只会出现像 McBurnie 这样的带有 2 个大写字母的名字
    • @exec85 : 查看上面的更新,我想这就是你所需要的。
    猜你喜欢
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多