我正在使用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项
这可以用某种匹配器来完成吗?如果是这样,我如何从下拉列表中选择正确的元素?
由于
答案 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()