我正在尝试抓取一些需要身份验证的网页,即首先您应该登录,然后您才能访问这些页面。
为此,我试图Symfony\Component\DomCrawler\Crawler
在我的应用程序中使用(我没有使用 Symfony 框架,我symfony/dom-crawler
使用过 Composer)。
<?php
require_once('/vendor/autoload.php');
use Symfony\Component\DomCrawler\Crawler;
class myTest extends WebTestCase {
function __construct () {
$crawler = new Crawler(file_get_contents('http://test.com/index.php'));
var_dump($crawler->filter('.menu_nav')->eq(0)->text());
}
}
new myTest;
这对于简单的页面非常有效,但不适用于经过身份验证的页面,即需要用户名和密码的页面。因此,我正在尝试使用Symfony 网站上的此页面并插入此代码:
<?php
require_once('/vendor/autoload.php');
use Symfony\Component\DomCrawler\Crawler;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class myTest extends WebTestCase {
function __construct () {
$client = static::createClient(array(), array(
'PHP_AUTH_USER' => 'username',
'PHP_AUTH_PW' => 'pa$$word',
));
// $crawler = new Crawler(file_get_contents('http://test.com/index.php'));
// var_dump($crawler->filter('.menu_nav')->eq(0)->text());
}
}
new myTest;
但我得到了这个:
Fatal error: Uncaught exception 'RuntimeException' with message 'You must override the KernelTestCase::createKernel() method.' in E:\xampp\htdocs\testCrawler\vendor\symfony\framework-bundle\Symfony\Bundle\FrameworkBundle\Test\KernelTestCase.php on line 44
为了解决这个问题,我添加phpunit.xml
了path/to/my/project/phpunit.xml
以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true" bootstrap="vendor/autoload.php">
<php>
<server name="KERNEL_DIR" value="path/to/my/project" />
</php>
<testsuites>
<testsuite name="Application Test Suite">
<directory>./stats/Test/</directory>
</testsuite>
</testsuites>
</phpunit>
如果我输入命令提示符phpunit
,我会得到:
path/to.my/project>phpunit
PHPUnit 4.5.0 by Sebastian Bergmann and contributors.
Configuration read from path/to.my/project\phpunit.xml
Time: 300 ms, Memory: 1.50Mb
No tests executed!
path/to.my/project>phpunit
这表明 phpunit 知道 phpunit.xml 文件,但错误仍然存在。
更新:目的不是将此程序用作单元测试或任何其他测试的一部分,此目的是通过任何可能的解决方案来抓取页面。