Exemple #1
0
 /**
  * Get Html throught CasperJs
  * @param string $url
  * @param array $params - [
  *                  'proxy' => ['host' => '',  'port' => '', 'login' => '', 'password' => ''],
  *                  'waitForSelector' => ['#idOrOtherSel' => 1000]
  *              ]
  * @return array
  */
 public static function getHtmlByCasper($url, array $params = [])
 {
     $options = [];
     if (!empty($params['proxy'])) {
         $options['proxy'] = "{$params['proxy']['host']}:{$params['proxy']['port']}";
         $options['proxy-auth'] = "{$params['proxy']['login']}:{$params['proxy']['password']}";
     } elseif (!empty(Proxy::$proxy)) {
         $proxy = current(Proxy::$proxy);
         $options['proxy'] = "{$proxy['host']}:{$proxy['port']}";
         $options['proxy-auth'] = "{$proxy['login']}:{$proxy['password']}";
     }
     $casper = new Casper(Yii::$app->params['casperJsPath']);
     $casper->setUserAgent(self::WEB_BROWSER);
     $casper->setOptions($options);
     $casper->start($url);
     if (!empty($params['waitForSelector'])) {
         $casper->waitForSelector(key($params['waitForSelector']), current($params['waitForSelector']));
     }
     $casper->run();
     return ['currentUrl' => $casper->getCurrentUrl(), 'html' => $casper->getHTML()];
 }
    public function testEvaluate()
    {
        $evaluateHtml = <<<TEXT
<!DOCTYPE html>
<html>
    <head>
    <meta charset="UTF-8">
    <title>test evaluate</title>
    </head>
    <body>
        <a id="theLink" href='http://www.google.com' onclick='return confirm("are you sure")'>link to google</a>
    </body>
</html>
TEXT;
        $filename = '/tmp/test-evaluate.html';
        file_put_contents($filename, $evaluateHtml);
        $casper = new Casper();
        $casper->start($filename)->click('#theLink')->run();
        $this->assertContains('google', $casper->getCurrentUrl());
        $casper = new Casper();
        $casper->start($filename)->evaluate('document.getElementById("theLink").href="http://www.yahoo.com";')->click('#theLink')->run();
        $this->assertContains('fr.yahoo.com', $casper->getCurrentUrl());
        @unlink($filename);
    }