Symfony DomCrawler:查找具有特定属性值的元素

Posted

技术标签:

【中文标题】Symfony DomCrawler:查找具有特定属性值的元素【英文标题】:Symfony DomCrawler: Find element with specific attribute value 【发布时间】:2013-04-24 10:28:14 【问题描述】:

我正在使用 DomCrawler 组件:http://symfony.com/doc/current/components/dom_crawler.html

我想使用类似 CSS 的语法,获取具有特定属性值的元素。

这是我正在使用的代码:

$link = $crawler->filter('#product a[data-type="bla"]');

这似乎可行,因为以下返回 1:

echo count($link);

但是,我永远无法过滤得更远。我做不到:

$link->filter('img')->attr('src'); 

这会导致以下错误消息:

The current node list is empty.

但是,我确定不是。

我已经尝试过其他元素的语法,它总是一样的。我做错了什么或者这是不可能的(使用类似 css 的语法,而不是 xpath)

【问题讨论】:

echo count($link->filter('img')); 的输出是什么?如果为 0,我猜你没有 img 元素作为你的 a 的子元素。这就是The current node list is empty.的原因 【参考方案1】:

我无法关注您的问题。使用两个软件库dom-crawlercss-selector的当前开发版本(以及2.1.0和2.2.0版本) ,考虑到以下示例 HTML,您提供的示例代码可以正常工作:

<?php
use Symfony\Component\DomCrawler\Crawler;

// require dependencies here    

$html = <<<'HTML'
<!DOCTYPE html>
<html>
    <body>
        <p class="message">Hello World!</p>
        <p>Hello Crawler!</p>
        <div id="product">
            <a data-type="bla">
                <img src="OK">
            </a>
        </div>
    </body>
</html>
HTML;

$crawler = new Crawler($html);

$link = $crawler->filter('#product a[data-type="bla"]');

echo var_dump(count($link));

var_dump($link->filter('img')->attr('src'));

正如您所看到的,这正是您的代码(只有一点点不同,但本质上没有),它逐字提供以下输出:

int(1)
string(2) "OK"

第一行是count(),第二行是src属性值。

你运行作曲家更新了吗?您是否仔细检查了输入?

【讨论】:

感谢您的回答。我必须道歉。输入确实不正确。它是通过 javascript 转换的,我通过 Safari 进行检查,它不再具有简单的查看源方法,导致对数据的错误假设。 @Wesley: discussions.apple.com/thread/4325736?start=0&tstart=0

以上是关于Symfony DomCrawler:查找具有特定属性值的元素的主要内容,如果未能解决你的问题,请参考以下文章

在laravel中使用Symfony的Crawler组件分析HTML

Symfony 2 Dom Crawler:如何在 Element 中仅获取 text()

PHP 使用Symfony插件sfDoctrineGuard按组名查找特定组中的用户

使用 Symfony 5/Twig“数组到字符串转换”的嵌套数组问题

Symfony按特定字段的内容顺序排列

jQuery 查找具有特定属性值的特定类