Подтвердить что ты не робот

Symfony DomCrawler: найдите элемент с определенным значением атрибута

Я использую компонент 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)

4b9b3361

Ответ 1

Я не могу следовать вашей проблеме. Используя текущие версии разработки (а также версии 2.1.0 и 2.2.0) из двух программных библиотек dom-crawler и css-selector, код примера, который вы предоставили, отлично работает с учетом следующего примера 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.

Запустили ли вы обновление для композитора? Вы дважды проверили вход?