Как выбрать ссылку, используя ее идентификатор или метку, с помощью сканера symfony dom?

Можно ли выбрать ссылку, используя ее идентификатор или класс с помощью сканера symfony?

Я попытался:

$crawler()->selectLink('#return-button')->link();
$crawler()->selectLink('.btn.return')->link();

Но у меня ошибка:

InvalidArgumentException: Текущий список узлов пуст.

Селектор работает только с использованием содержимого тега a?


person LucileDT    schedule 07.08.2019    source источник


Ответы (3)


Да, это работает только с текстом ссылки или атрибутом alt, если ваша ссылка является изображением.

Метод filter() использует компонент CssSelector для преобразования селектора в выражение XPath, а затем вызывает filterRelativeXPath() так же, как selectLink(), поэтому они возвращают тот же тип, и вы должны иметь возможность просто вызвать

$crawler->filter('#return-button')->link();

В случае селектора класса, который возвращает несколько совпадений, поскольку link() работает только на первом узле, вместо этого вам нужно будет вызвать links():

$crawler->filter('.btn.return')->links();
person msg    schedule 08.08.2019

Попробуй это:

$myLink = $crawler->filter('#return-button')->text();
$myLink = $crawler->filter('.btn.return')->text();

Это вернет текст ссылки или кнопки, а затем:

$crawler()->selectLink($myLink)->link();

Это действительно лучше, чем выбирать ссылки по тексту. Удачи :-)

person Hugues D    schedule 08.08.2019
comment
Спасибо за ваш комментарий! К сожалению, это не работает, я полагаю, потому что в моей ссылке есть тег значка, и сканер не может selectLink, когда он содержит HTML. - person LucileDT; 08.08.2019

Я так не думаю:

public selectLink ( string $value ) : Crawler

где $value — это строка, являющаяся текстом ссылки:

symfony.component.domcrawler/ Искатель/выбратьСсылка

Но вы можете попробовать:

$crawler->filter('body')->children('a.lorem')->attr('href'); //if you need the link

или может, это работа с id:

$crawler->filter('body')->children('a@foo');

Вы должны выяснить для себя, если проверить это:

symfony/components/dom_crawler

person danigore    schedule 07.08.2019