Python硒忽略文本格式?



我有一个问题,当我试图匹配我的name字符串之间的名称和一个元素中的名称。

例如:

我的name字符串的名称格式(从网站抓取):Mcburnie

元素名称: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字符串,所以我首先得到一个大写字母,但我不知道如何处理上面的这种情况。

任何想法我怎么能得到它的工作,元素被点击时,文本格式是不同的?

试试这个:

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
+ "')]"
),
)
)
) 

您可以尝试使用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() +"')]"

您也可以使用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子句

Update 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而不硬编码文本,那么根本不建议使用。

最新更新