扫描类名相同的行元素

时间:2014-03-30 08:47:16

标签: python python-2.7 selenium selenium-webdriver

我在网页中的行中有许多链接,其类名相同。像这样:

enter image description here

我可以使用XPATH点击第一个链接,

"(//span[@class='odds black'])"

但是,我想浏览特定行并单击每个赔率(如果存在)。 有关如何实现这一目标的任何帮助?

注意:我找不到使用其他属性的元素,因为它会根据数据动态变化。

参考源代码图片:

enter image description here

3 个答案:

答案 0 :(得分:1)

假设类名将始终为'赔率某种颜色',您可以使用xpath的contains()函数。像这样的Xpath:

"//span[contains(@class,'odds')]"

将返回包含在classname中的字符串'odds'的所有跨度。

答案 1 :(得分:1)

而不是以这种格式使用XPATH:

"(//span[@class='odds black'])"

你能以红色框上方显示的格式使用它吗?

/html/body/div[2]/div[3]/div[1]/div[1]/div[2]table/tbody[31]/tr[1]/td[5]/a/span[2]/span/span

(您可以通过选择firebug中的元素,右键单击它的代码并选择复制XPATH来轻松获得此格式。

我发现在很多情况下我可以为tr [1]或其他路径属性添加一个计数器,以便非常准确地向下移动行。我无法真正看到您的网站比较下面的xpath,但我想它会是这样的:

/html/body/div[2]/div[3]/div[1]/div[1]/div[2]table/tbody[31]/tr[1]/td[5]/a/span[2]/span/span
/html/body/div[2]/div[3]/div[1]/div[1]/div[2]table/tbody[31]/tr[2]/td[5]/a/span[2]/span/span
/html/body/div[2]/div[3]/div[1]/div[1]/div[2]table/tbody[31]/tr[3]/td[5]/a/span[2]/span/span

然后你可以添加一个像" i"

这样的计数器

所以你将在循环中迭代计数器并将其设置为以下行:

"/html/body/div[2]/div[3]/div[1]/div[1]/div[2]table/tbody[31]/tr["+str(i)+"]/td[5]/a/span[2]/span/span"

答案 2 :(得分:0)

CSS选择器是类识别的,因此使用它会更有意义;

span.odds

Xpath将类视为一个简单的字符串,因此强制您使用" contains" CSS允许您单独处理类