我有一个问题,当我试图匹配我的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
而不硬编码文本,那么根本不建议使用。