我想得到所有div / links / ..的xpath计数,它们的文本与正则表达式匹配。例如:
<span> day 2 night </span>
<span> day 4 night </span>
<span> day 17 night</span>
我希望能够致电:
sel.get_xpath_count('regexp:day \d night')
并让它返回2.(这是一个简单的例子当然,我想使用各种正则表达式)
这可能吗,怎么做?
答案 0 :(得分:2)
使用允许您使用javascript的dom=
协议。并且javascript有regexp:
# sorry, example in Perl:
$sel->get(qq{dom=(function(){
var x = document.getElementsByTagName('span');
var result = [];
for (var i=0;i<x.length;i++) {
var txt = x[i].innerHTML;
if (txt.match(/day \d night/)) {
result.push(x[i]);
}
}
return result;
})()});
答案 1 :(得分:2)
正则表达式仅在XPath 2中可用。如果您使用的浏览器中有XPath 2,则以下内容应该有效:
get_xpath_count("xpath=//div*[matches(text(), \"day \\d night\")]");
但是,我相信在Selenium中实现的XPath的Javascript实现实现了XPath 1.0。因此,编写一个小的Javascript函数来抓取页面中的所有元素,并在Javascript中使用正则表达式,只是让这个函数返回匹配的数量可能更容易。然后,您可以使用get_eval
调用此Javascript函数。
答案 2 :(得分:0)
您还可以获取父/根元素的HTML页面源或innerHTML(通过DOM定位器),然后通过编程语言将XML转换为DOM对象。从那里,您可以使用XPath(版本1或2)随意处理DOM以获得您想要的内容。然后,您可以使用Selenium传递结果(例如计数)来执行某些操作。
使用这种方法,您只受限于您的编程语言提供的任何内容。