Symfony2 DOMCrawler selectLink返回null uri

时间:2012-08-21 13:49:36

标签: php symfony functional-testing

我在编写功能测试和DOMCrawler方面遇到了问题。我的问题是通过链接抓取邮件内容。从文档中我看到可以使用html内容作为参数创建爬虫。所以这是我的一大堆代码:

$mailCrawler = new Crawler($message->getBody());
$linkCrawler = $mailCrawler->selectLink('Link name');
$client->click($linkCrawler->link());

在第三行,我有一个例外,因为$ linkCrawler有空的$ uri字段。 异常消息:

InvalidArgumentException: Current URI must be an absolute URL ("").

任何人都可以告诉我为什么抓取工具无法获得该链接?

我只能告诉$ message var getBody方法返回正确的内容。

此致

1 个答案:

答案 0 :(得分:6)

您需要指定root抓取工具网址。例如:

$crawler = new Crawler('', 'http://www.example.com');
$crawler->addHtmlContent("
    <!DOCTYPE html>
    <html>
        <body>
            <a href=\"/rel-link\">rel-link-text</a>
            <a href=\"http://another.com/abs-link\">abs-link-text</a>
        </body>
    </html>
", 'UTF-8');

$cLink1 = $crawler->selectLink('rel-link-text')->eq(0);
$l1 = $cLink1->link();
echo $l1->getUri(); // http://www.example.com/rel-link

$cLink2 = $crawler->selectLink('abs-link-text')->eq(0);
$l2 = $cLink2->link();
echo $l2->getUri(); // http://another.com/abs-link