在Laravel 5.2中使用Domcrawler获得表格



我正在使用laravel 5.2命令,并尝试使用Symfony Component Domcrawler获得表单。因此,在Domcrawler文档和API的帮助下,我有此代码:

use IlluminateConsoleCommand;
use GuzzleHttpClient as GuzzleClient;
use SymfonyComponentDomCrawlerCrawler;

和,在handing((方法中:

$fake_body = '<html>
    <head>
    </head>
    <body>
        <div class="row search-filtro" style="    margin-top: 10px;">
            <form id="search_form" action="http://somesite.com/">
                <select class="form-control" id="slc_region" name="slc_region" form="form_busqueda" >
                    <option value="default" disabled selected style="display: none;">Ciudad</option>
                    <option value="default">Todo</option>
                    <option value="1">Región Metropolitana</option>
                    <option value="2">XV Arica y Parinacota</option>
                </select>
                <select class="form-control" id="slc_tipo" name="slc_tipo" form="form_busqueda" >
                    <option value="default" disabled selected style="display: none;">Categoría</option>
                    <option value="default">Todo</option><option value="Tiempo Libre">Tiempo Libre</option>
                    <option value="Otros">Otros</option><option value="Tecnología">Tecnología</option>
                    <option value="Salud, Deporte y Belleza">Salud, Deporte y Belleza</option>
                    <option value="Mi Casa">Mi Casa</option><option value="Infantil">Infantil</option>
                    <option value="Vestuario y Calzado">Vestuario y Calzado</option>
                </select>
                <input type="text" id="buscar_inp" name="buscar_inp" class="form-control" placeholder="Buscar Comercio..." >
                <button type="button" id="buscar_btn" class="btn btn-search btn-lg col-sm-12">BUSCAR</button>
            </form>
        </div>
    </body>
</html>
';
$site = new Crawler( $fake_body );
$form = $site->filter('form')->form();

im在laravel命令中编程此程序,因此,当我使用php artisan scrap-site在控制台中运行此消息时,我的脚本会停止此消息错误:

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

我已经尝试使用相对URL,绝对URL,HTTP,HTTP和删除属性设置表单的操作属性,但始终是同一错误。

捕获和跟踪错误消息,我在 vendor/symfony/dom-crawler/AbstractUriElement.php中找到了抽象类 AbstractUileement ,并且错误是在__Construct方法中。

/**
 * @param DOMElement $node       A DOMElement instance
 * @param string      $currentUri The URI of the page where the link is embedded (or the base href)
 * @param string      $method     The method to use for the link (get by default)
 *
 * @throws InvalidArgumentException if the node is not a link
 */
public function __construct(DOMElement $node, $currentUri, $method = 'GET')
{
    if (!in_array(strtolower(substr($currentUri, 0, 4)), array('http', 'file'))) {
        throw new InvalidArgumentException(sprintf('Current URI must be an absolute URL ("%s").', $currentUri));
    }
    $this->setNode($node);
    $this->method = $method ? strtoupper($method) : null;
    $this->currentUri = $currentUri;
}

$currentUri参数进行回声,它是空的!:(

有什么想法?

只需将 root url添加到爬网中,您应该很好

$fake_body = '<html>
    <head>
    </head>
    <body>
        <div class="row search-filtro" style="    margin-top: 10px;">
            <form id="search_form" action="http://somesite.com/">
                <select class="form-control" id="slc_region" name="slc_region" form="form_busqueda" >
                    <option value="default" disabled selected style="display: none;">Ciudad</option>
                    <option value="default">Todo</option>
                    <option value="1">Región Metropolitana</option>
                    <option value="2">XV Arica y Parinacota</option>
                </select>
                <select class="form-control" id="slc_tipo" name="slc_tipo" form="form_busqueda" >
                    <option value="default" disabled selected style="display: none;">Categoría</option>
                    <option value="default">Todo</option><option value="Tiempo Libre">Tiempo Libre</option>
                    <option value="Otros">Otros</option><option value="Tecnología">Tecnología</option>
                    <option value="Salud, Deporte y Belleza">Salud, Deporte y Belleza</option>
                    <option value="Mi Casa">Mi Casa</option><option value="Infantil">Infantil</option>
                    <option value="Vestuario y Calzado">Vestuario y Calzado</option>
                </select>
                <input type="text" id="buscar_inp" name="buscar_inp" class="form-control" placeholder="Buscar Comercio..." >
                <button type="button" id="buscar_btn" class="btn btn-search btn-lg col-sm-12">BUSCAR</button>
            </form>
        </div>
    </body>
</html>
';
$site = new Crawler( $fake_body, 'http://my-project.dev/' );
$form = $site->filter('form')->form();

最新更新