Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在web爬虫中处理AJAX块或手动创建输入_Php_Forms_Symfony_Phpunit_Web Crawler - Fatal编程技术网

Php 在web爬虫中处理AJAX块或手动创建输入

Php 在web爬虫中处理AJAX块或手动创建输入,php,forms,symfony,phpunit,web-crawler,Php,Forms,Symfony,Phpunit,Web Crawler,基于Alvin Bunk的文章,我想创建一个web cralwer,在网站上登录,然后提交表单 我的问题是,在那个网站上有一个Ajax块,在点击后生成,空链接我需要填写的输入很少,所以我需要以某种方式点击那个空链接或手动插入输入 我用很多方法修改了下面的代码,试图让它正常工作,但在访问功能上我遇到了问题 I get未捕获错误:在null上调用成员函数visit() <?php require 'vendor/autoload.php'; trait MinkSetup { pr

基于Alvin Bunk的文章,我想创建一个web cralwer,在网站上登录,然后提交表单

我的问题是,在那个网站上有一个Ajax块,在点击后生成,空链接我需要填写的输入很少,所以我需要以某种方式点击那个空链接或手动插入输入

我用很多方法修改了下面的代码,试图让它正常工作,但在访问功能上我遇到了问题

I get未捕获错误:在null上调用成员函数visit()

<?php
 require 'vendor/autoload.php';

trait MinkSetup
{
    private $minkBaseUrl;
    private $minkSession;

    /**
     * @before
     */
    public function setupMinkSession()
    {
        $this->minkBaseUrl = 'https://www.url.com';
        $driver = new \Behat\Mink\Driver\Selenium2Driver('firefox');
        $this->minkSession = new \Behat\Mink\Session($driver);
        $this->minkSession->start();
    }

    public function getCurrentPage()
    {
        return $this->minkSession->getPage();
    }

    public function getCurrentPageContent()
    {
        return $this->getCurrentPage()->getContent();
    }

    public function visit($url)
    {
         echo $url;
        $this->minkSession->visit($url);
    }

    public function login($user, $pass){
        $this->minkSession->visit('complete url');
        $page = $this->getCurrentPage();
        echo $page;
        $page->fillField('email', $user); // Enter username.
        $page->fillField('password', $pass); // Enter password.
        $page->pressButton('Login');

        $content = $this->getCurrentPageContent();
        $this->assertContains('logout', $content);
    }

    /**
     * @afterClass
     */
    public function logout(){
        $page = $this->getCurrentPage();
        $page->clickLink('logout');
    }
}
use PHPUnit\Framework\TestCase;


class MinkPetitionTest extends  TestCase
{
    use MinkSetup;

    public function testSubmitPage(){
        $this->login('user', 'pw'); // Login first.

        $this->visit('full url');
        $page = $this->getCurrentPage(); // Get the page.
        echo $page;
        $page->fillField('form_ban_id', '1234');
        $page->pressButton('form_find_student');

        $content = $this->getCurrentPageContent();   // Get page content.
        $this->assertContains('<u>No Petitions</u> exist for Some User Student ID: 1234', $content);
    }
}



$client = new MinkPetitionTest(); //tried to get something to work
$client->testSubmitPage(); //same here

如果您使用的是最新的phpunit,则需要像这样更改测试类:

...
use PHPUnit\Framework\TestCase;

class MinkPetitionTest extends TestCase
{
   ...
你能先试试看结果吗


编辑#2

此外,您的trait文件不正确。应该是:

trait MinkSetup
{
    private $minkBaseUrl;
    ...

    public function visit($url)
    {
        $this->minkSession->visit($this->minkBaseUrl . $url);
    }
    ...

尝试一下

如果您使用的是最新的phpunit,您需要像这样更改测试类:

...
use PHPUnit\Framework\TestCase;

class MinkPetitionTest extends TestCase
{
   ...
你能先试试看结果吗


编辑#2

此外,您的trait文件不正确。应该是:

trait MinkSetup
{
    private $minkBaseUrl;
    ...

    public function visit($url)
    {
        $this->minkSession->visit($this->minkBaseUrl . $url);
    }
    ...

尝试相同的未捕获错误:调用成员函数visit(),在visit函数中为null,我更新了代码您输入的代码是否错误?您有
$this->访问(完整url')
但是参数应该被引用,如下所示:
$this->visit('full url')。关于trait文件,请参见我的编辑2。确保您正在按照我的教程复制代码。应该有一些小的改变。我只是用完整的url做了一个例子,链接是正确的,访问功能不起作用,也改变为使用私有常量,但是访问总是为空的,因为某些原因,你对处理ajax块有其他想法吗?你的命名空间匹配吗!???这些文件需要位于
tests\AppBundle\Functional
文件夹中;如果不是,你会得到各种各样的错误。在您这边进行一点故障排除可能会有所帮助。相同的未捕获错误:在visit函数的null上调用成员函数visit(),我更新了代码您是否输入了错误的代码?您有
$this->访问(完整url')
但是参数应该被引用,如下所示:
$this->visit('full url')。关于trait文件,请参见我的编辑2。确保您正在按照我的教程复制代码。应该有一些小的改变。我只是用完整的url做了一个例子,链接是正确的,访问功能不起作用,也改变为使用私有常量,但是访问总是为空的,因为某些原因,你对处理ajax块有其他想法吗?你的命名空间匹配吗!???这些文件需要位于
tests\AppBundle\Functional
文件夹中;如果不是,你会得到各种各样的错误。在你这边进行一点故障排除可能会有所帮助。我更新了我的貂皮文章,其中包含phpunit更改所需的更改。您好,King。你有AJAX代码的副本吗?我已经准备好了一个Mink项目,很快就可以进入github,然而,使用Mink的全部意义在于Javascript或AJAX;所以我需要了解您使用的代码。你也可以把它发布在pastebin上并复制URL。我用phpunit更改所需的更改更新了我的Mink文章。你好,King。你有AJAX代码的副本吗?我已经准备好了一个Mink项目,很快就可以进入github,然而,使用Mink的全部意义在于Javascript或AJAX;所以我需要了解您使用的代码。您还可以将其发布到pastebin并复制URL。