/** * 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); }