1

我正在尝试抓取一些需要身份验证的网页,即首先您应该登录,然后您才能访问这些页面。

为此,我试图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.xmlpath/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 文件,但错误仍然存​​在。

更新:目的不是将此程序用作单元测试或任何其他测试的一部分,此目的是通过任何可能的解决方案来抓取页面。

4

0 回答 0