Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SeleniumRC/Perl动态XPath选择器不工作_Perl_Xpath_Selenium_Selenium Rc - Fatal编程技术网

SeleniumRC/Perl动态XPath选择器不工作

SeleniumRC/Perl动态XPath选择器不工作,perl,xpath,selenium,selenium-rc,Perl,Xpath,Selenium,Selenium Rc,这是XPath语法的问题,而不是其他任何问题 我在一个网站上有多个产品页面,每个产品页面上都有多个产品。每个产品都有“添加到购物车”按钮的唯一ID。我正在尝试返回所有的唯一ID,以便我可以添加一些产品到包中。使用XPath搜索似乎是解决这一问题的正确方法。我有以下代码用于使用XPath查询HTML并返回唯一ID: $XPATH_COUNT = $sel->get_xpath_count("//div[\@class='quick-info-link']/a"); @my_array; $

这是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++;
}
正确返回quickview-link-PROD6945。第二次运行产生以下结果:

//a[@id!='quickview-link-PROD7029' and a[@id!='quickview-link-PROD6945' and img[@alt='Quick Shop']]]/@id
这会在我的SeleniumRC终端窗口中抛出一个错误:在会话中找不到元素[…xpath query..]

我知道可以使用索引(即在XPath查询的末尾添加一个
[I]
)来访问页面上的元素,但是这在Selenium中并不适用

任何帮助都会很好。谢谢你抽出时间, 史蒂夫

img[@alt='Quick Shop'] ] ]/@身份证

这在我的SeleniumRC中抛出了一个错误 终端错误窗口:元素 在会话上找不到[…xpath查询..]

如果您提供应用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'
                                )
                            ]

你想要什么还不清楚。那些
@id
真的是uniques吗,还是你想得到uniques?看起来您正试图通过向XPath表达式顺序添加一个过滤器来“迭代”这个uniques ID。我认为这不是正确的方法。。。
//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'
                                )
                            ]