我在python中使用Selenium来查找DOM树中的一些元素。我想找到具有特定模式的类名。我该怎么做才能找到这样的课程名称?我想用find_elements_by_class_name
使用正则表达式,但我不知道如何做到这一点。请建议我该怎么做。
例如:我想find_elements_by_class_name(browser, 'webstore-de-Kb')
,但de
和Kb
部分总是在变化,我想搜索webstore-[a-zA-Z]+[a-zA-Z]+-[a-zA-Z]+[a-zA-Z]+
有可能做那样的事吗?如果有,怎么样?如果不是,还有其他选择吗?
答案 0 :(得分:0)
我建议学习CSS。你可以做各种各样的事情。在您的示例中,您可以执行以下操作:
a[id^='the_id']
当元素 <a href="#" id="the_id_12345" />
时,
我详细介绍了您可以在此处使用的不同类型的选择器:
http://ddavison.github.io/css/2014/02/18/effective-css-selectors.html 您可以使用:
答案 1 :(得分:0)
您可以直接执行javascript并让selenium为您返回结果。这意味着您基本上可以使用任何条件查找元素,而不仅仅是id或类名甚至xpath。
使用execute_script
方法:
# Note: I don't know python so forgive any syntax errors.
# This example is modified from the one in the Selenium documentation:
element = driver.execute_script(
"function domTraverse (el,callback) {" +
" if (callback(el)) return el;" +
" else {" +
" var ret;" +
" for (var x=0;x<el.children.length;x++) {" +
" ret = domTraverse(el.children[x],callback);" +
" if (ret) return ret;" +
" }" +
" }" +
" return null" +
"}" +
"return domTraverse(document.body,function(e){" +
" // match desired regex:" +
" return e.className.match(/webstore-[a-zA-Z]+[a-zA-Z]+-[a-zA-Z]+[a-zA-Z]+/);" +
"});"
)
显然,如果您在页面上加载了jQuery或YUI之类的东西,可以使用它们而不是编写自己的自定义DOM解析函数。