Python 模糊匹配与模糊匹配

Python 模糊匹配与模糊匹配,python,fuzzy-comparison,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</op

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

我所知道的可能是下拉列表中的值,例如:

<select>
    <option>Red, wooly, jumper, large, UK</option>
    <option>Blue, wooly, jumper, small, USA</option> 
    <option>Red, wooly, scarf, small, UK</option>
</select>
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)
这将从下拉列表中选择第三项

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


谢谢

您尝试过使用正则表达式吗??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
但是这会有点长,所以我会使用正则表达式,例如:

<select>
    <option>Red, wooly, jumper, large, UK</option>
    <option>Blue, wooly, jumper, small, USA</option> 
    <option>Red, wooly, scarf, small, UK</option>
</select>
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\u属性(“innerHTML”)
没有获取内部文本,请尝试.text()

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

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()

m
会给我元素/文本吗?m是匹配项,如果你想打印文本元素,请参阅上面我现在要做的更新,这不仅应该生成正确的元素,假设selenium找到了所有标记,而且如果你打印组(1),它应该打印红色、羊毛、围巾、小的、UKI刚刚使用的
如果m:element.click()
好的,是的,如果m是你想要点击的元素(在我的例子中是ele.click()),打印m.group(1)只会打印两个元素之间的内容,我误读了你之前的评论,不管怎样,使用regex是匹配fuzzy的一个好方法,我使用这个网站检查我的regex,然后将其放入代码中