Python selenium和模糊匹配

时间:2015-10-08 15:08:16

标签: python fuzzy-comparison

我正在使用Selenium填充一些下拉菜单。这些下拉菜单非常动态。

我所拥有的是可能在下拉列表中的值,例如:

<select>
    <option>Red, wooly, jumper, large, UK</option>
    <option>Blue, wooly, jumper, small, USA</option> 
    <option>Red, wooly, scarf, small, UK</option>
</select>

理想情况下,我要做的是选择最接近以下字符串的选项

'Red, wooly, small, UK'

这将从下拉列表中选择第3项

这可以用某种匹配器来完成吗?如果是这样,我如何从下拉列表中选择正确的元素?

由于

2 个答案:

答案 0 :(得分:0)

你试过使用正则表达式吗? Python正则表达式匹配第三行,甚至使用pythons内置.find()方法。由于您使用了selenium,您可以找到所有选项元素,遍历每个元素,检查每个元素的文本,并将其与您的字符串进行比较。

例如

elem = browser.find_elements_by_tag_name("option") 
for ele in elem:
  if ele.get_attribute("innerHTML").find('Red') > -1 and ele.get_attribute("innerHTML").find('wolly') > -1 and ele.get_attribute("innerHTML").find('small') > -1 and ele.get_attribute("innerHTML").find('small') > -1:
    #TODO

然而,这有点长,所以我会使用正则表达式,例如:

import re
elem = browser.find_elements_by_tag_name("option") 
for ele in elem:
  m = re.search(r'(Red,.+wooly,.+small,.+UK)', ele.get_attribute("innerHTML"))
  if m:
    print m.group(1)

如果.get_attribute("innerHTML")没有获取内部文本,请尝试.text()

答案 1 :(得分:0)

您可以从选项中获取文本,然后比较您的文字,如下所示:

elms = driver.find_elements_by_css_selector("select > option")
ops = []
for el in elms:
    ops.append(el.text)

s = 'Red, wooly, small, UK'.split(", ")

weight = []

for op in ops:
    n_occurance = 0
    for text in s:
        if text in op:
            n_occurance += 1

    weight.append(n_occurance)

most_like = weight.index(max(weight)

elems[most_like].click()