如何使用 symfony dom 爬虫通过包含不间断空格的标签 select a link?

How to select a link by its label containing non breaking spaces using the symfony dom crawler?

我有一个 link:

<a
    id="return-button"
    href="{{ path('user_list') }}"
    class="btn btn-secondary">
    <i class="icon ion-md-arrow-back"></i>&nbsp;Back to the list
</a>

我尝试在测试中使用它。为此,我 select 它的标签:

self::$client->getCrawler()
             ->selectLink('Back to the list')
             ->link();

但是测试报错:

InvalidArgumentException: The current node list is empty.

是因为 link 标签中的 &nbsp;。如果我用一个简单的 space 替换它,道琼斯指数爬虫就可以 select 它。

我如何select这个link而不删除其中的非中断space?

您可以尝试使用这种语法:

{{ ' 返回列表'|raw }}

或者这个:

{{ ' 返回列表' }}

如本期所述:https://github.com/symfony/symfony/issues/33062,由于 Symfony 使用的 XPath 引擎,此行为是一个错误。

目前,为了避免这个问题,我们可以通过以下方式在 DOM 爬虫选择器中指定非中断 space:

self::$client->getCrawler()
             ->selectLink("\xc2\xa0Back to the list")
             ->link();

注意双引号而不是简单的引号。