alwex / php-casperjs

simple PHP wrapper for CasperJS
MIT License
182 stars 71 forks source link

Set Headers [here is my Code] and a little Bug #23

Closed matze-berg closed 7 years ago

matze-berg commented 7 years ago

Hi, what about a Function to set the Headers? So you can use:

 $this->client->setHeaders([
                    'Accept'          => $_SERVER['HTTP_ACCEPT'],
                    'Accept-Language' => $_SERVER['HTTP_ACCEPT_LANGUAGE'],
                    'Cache-Control'   => 'max-age=0, must-revalidate',
                    'Connection'      => 'Keep-Alive',
                    'User-Agent'      => $_SERVER['HTTP_USER_AGENT'],
            ]);

The Function will be:

        public function setHeaders(array $headers)
        {
            $headersScript = "
casper.page.customHeaders = {
";
            if (!empty($headers)) {
                $headerLines = [];
                foreach ($headers as $header => $value) {
                    // Current version of casperjs will not decode gzipped output
                    if ($header == 'Accept-Encoding') {
                        continue;
                    }
                    $headerLine = "    '{$header}': '";
                    $headerLine .= (is_array($value)) ? implode(',', $value) : $value;
                    $headerLine .= "'";
                    $headerLines[] = $headerLine;
                }
                $headersScript .= implode(",\n", $headerLines)."\n";
            }
            $headersScript .= "};";
            $this->_script .= $headersScript;

            return $this;
        }

And my Issue is the following:

$this->client->fillForm('form#tsf', ['#lst-ib' => 'Test'], false);

This returns nothing. After this, the HTML is empty. Here is the complete code:

$this->client = new Casper();
$this->client->start('http://www.google.com');
$this->client->fillForm('form#tsf', ['#lst-ib' => 'Test'], false);
$this->client->run();
echo $this->client->getHTML();
alwex commented 7 years ago

Hi, for the setHeader function, can you create a pull request? I will look into the bug. Thank for the info

alwex commented 7 years ago

I don't think it is a bug, it is more like you are trying to fill an input that does not exists in the context of your virtual browser [info] [remote] attempting to fetch form element from selector: 'form#tsf' and then the script stop because the element does not exists.

try this line instead: $client->fillForm('form[action="/search"]', ['q' => 'Test'], false);

matze-berg commented 7 years ago

Ok, thats right. Now it works. Thank you.

I have submitted the Request.