【问题标题】:Symfony2 DOMCrawler selectLink returns null uriSymfony2 DOMCrawler selectLink 返回空 uri
【发布时间】:2012-08-21 13:49:36
【问题描述】:

我在编写功能测试和 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 方法返回正确的内容。

问候

【问题讨论】:

  • 首先猜测是“链接名称不在您的页面上。 var_dump(mailCrawler->selectLink('Link name')); 并验证它不为空。
  • 看起来确实如此。我现在有另一个电子邮件功能测试和同样的问题。链接存在,但在执行此 var_dump 时 uri 为空

标签: php symfony functional-testing


【解决方案1】:

您需要指定根爬虫网址。示例:

$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

【讨论】:

  • 谢谢,遇到同样的问题,那个答案解决了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
  • 2014-11-18
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多