这是XPath语法的问题,而不是其他任何问题。
我在网站上有多个产品页面,每个产品页面上都有多个产品。每个产品都有一个用于添加到购物车按钮的唯一ID。我正在尝试返回所有唯一的ID,以便我可以将几个产品添加到包中。使用XPath进行搜索似乎是正确的解决方案。我有以下代码用于使用XPath查询HTML并返回唯一ID:
$XPATH_COUNT = $sel->get_xpath_count("//div[\@class='quick-info-link']/a");
@my_array;
$my_array[0] = $sel->get_attribute("//div[\@class='quick-info-link']/a/\@id");
print $my_array[0];
$count = 0;
while( $count < $XPATH_COUNT )
{
$arrayCount=0;
$a = "//";
foreach( @my_array )
{
$tmp = "a[\@id!='" . $my_array[$arrayCount] . "' and ";
$b .= $tmp;
$d .= "]";
$arrayCount++;
}
$c = "img[\@alt='Quick Shop']";
$e = $c . $d . "/\@id";
$xpath_query = $a . $b . $e;
$my_array[$count] = $sel->get_attribute($xpath_query);
$count++;
}
第一次运行的输出是一个XPath查询,如下所示:
//a[@id!='quickview-link-PROD7029' and img[@alt='Quick Shop']]/@id
哪个正确返回quickview-link-PROD6945。第二轮产生了这个:
//a[@id!='quickview-link-PROD7029' and a[@id!='quickview-link-PROD6945' and img[@alt='Quick Shop']]]/@id
在我的SeleniumRC终端窗口中出现ERROR错误:会话中找不到元素[..xpath query ..]。
我知道可能使用索引(即在XPath查询的末尾添加[i]
)来访问页面上的元素,但这不是Selenium中有用的东西。
任何帮助都会很棒。谢谢你的时间, 史蒂夫
答案 0 :(得分:1)
//a[@id!='quickview-link-PROD7029' and a[@id!='quickview-link-PROD6945' and
img [@ alt ='快速购物'] ] ] / @ id
这在我的SeleniumRC中引发了错误 ERROR的终端窗口:元素 会话中找不到[..xpath query ..]
如果您提供应用XPath表达式的XML文档并解释您要选择的节点,那将非常有用。
没有这些必要的信息:
此问题的最明显原因是上述表达式正在查找a
子元素具有某些属性的a
元素。
通常a
元素没有a
个孩子。
您真正想要的是:
//a[@id != 'quickview-link-PROD7029'
and
@id != 'quickview-link-PROD6945' and img[@alt='Quick Shop']
]/@id
这可以简化一下:
//a[img[@alt='Quick Shop']/@id
[not(. = 'quickview-link-PROD7029'
or
. = 'quickview-link-PROD6945'
)
]