我正在使用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]+
这样的东西
有没有可能做这样的事情?如果是,是如何实现的?如果没有,有没有其他选择?
发布于 2014-02-21 18:28:40
我建议你学习CSS。你可以做各种各样的事情。在您的示例中,您可以执行以下操作:
a[id^='the_id']
当元素为<a href="#" id="the_id_12345" />
时
我在这里详细介绍了您可以使用的不同类型的选择器:http://ddavison.github.io/css/2014/02/18/effective-css-selectors.html
您可以使用:
发布于 2014-02-21 18:44:55
您可以直接执行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解析函数。
https://stackoverflow.com/questions/21942301
复制相似问题