2016-02-13 40 views
1

我不知道我的邏輯是否正確,但這就是我想要解決的Cookie所需的限制或無法通過身份驗證登錄頁面(例如臉書)使用phantomjs無頭瀏覽器和php-webdriver。如何關注頁面重定向並持續設置常量瀏覽器useragent使用phantomjs和php-webdriver

很不錯,第一個實例會在訪問url時將用戶代理設置爲瀏覽器的代理,但可以通過重定向(通過元或JavaScript重定向)到另一個頁面來驗證useragent以進行瀏覽器測試作爲cookie。

我從提取bpteam/PHP的cookie的一段代碼,從預先配置的cookie文件,這是在這裏下面

<?php 
$cookiedata = file_get_contents("/usr/share/nginx/html/php-webdriver/cookies.txt"); 

//from bpteam/php-cookie 
function parsCookieString($text){ 
    $parameters = ['expires', 'domain', 'path']; 
    if(preg_match('%^\s*(?<name>\w+)\s*=\s*(?<value>[^;]+)%ims', $text, $match)){ 
     $cookie['name'] = trim($match['name']); 
     $cookie['value'] = trim($match['value']); 
    } else { 
     return false; 
    } 
    foreach($parameters as $param){ 
     if(preg_match('%' . $param . '\s*=\s*(?<val>[^;]+)%i', $text, $match)){ 
      $cookie[$param] = trim($match['val']); 
     } 
    } 
    $cookie['secure'] = (bool)preg_match('%;\s*secure\s*(;|$)%i', $text); 
    $cookie['httponly'] = (bool)preg_match('%;\s*httponly\s*(;|$)%i', $text); 
    return $cookie; 
} 
function from($text){ 
    $lines = explode("\n", $text); 
    $regexDelimiter = '(?:(?:\\\\n)?((\\\\0|\\\\{2}|((\\\\x[0-9a-f]{2}){2}|\\\\x[0-9a-f]{2})|\\\\x[0-9a-f]|\\\\_|\\\\[abtnvfr]|[g-zG-Z]|\W|\\\\\W)))'; 
    $regexLine = "%^cookies=\"?\@Variant\(({$regexDelimiter}{4}){2}QList\\<QNetworkCookie\\>\\\\0({$regexDelimiter}{4}){2}(?<cookie_str>.*)\)\"?\s*$%ms"; 
    if(!isset($lines[1]) || !preg_match($regexLine, $lines[1], $match)){ 
     return array(); 
    } 
    $delimiter = 'REPLACE_COOKIE_DELIMITER'; 
    $regEx = "\\\\0\\\\0\\\\0".$regexDelimiter; 
    $text = preg_replace("%$regEx%ms", $delimiter, $match['cookie_str']); 
    $cookiesLines = explode($delimiter, $text); 
    $cookies = array(); 
    foreach ($cookiesLines as $cookieLine) { 
     $cookie = parsCookieString($cookieLine); 
     if($cookie){ 
      $cookies[] = $cookie; 
     } 
    } 
    return $cookies; 
} 
$cookies = from($cookiedata); 
?> 

獲得餅乾而這就是我想要做的,可能不會成功嘗試通過auth登錄頁面(例如Facebook)登錄。

<?php 
set_time_limit(0); 
use Facebook\WebDriver\Remote\DesiredCapabilities; 
use Facebook\WebDriver\Remote\RemoteWebDriver; 
use Facebook\WebDriver\Remote\WebDriverCapabilityType; 
use Facebook\WebDriver\WebDriverDimension; 
use Facebook\WebDriver\WebDriverBy; 

require_once('vendor/autoload.php'); 
//require_once('visidom.php'); 
require_once('cookie.php'); 

$host = 'http://localhost:4444/wd/hub'; 
$capabilities = DesiredCapabilities::phantomjs(); 

$capabilities->setCapability(
    'phantomjs.cli.args', 
    ['--ignore-ssl-errors=true', '--web-security=false','--cookies-file=/usr/share/nginx/html/php-webdriver/cookies.txt','--webdriver=4444'] 
); 
$capabilities->setCapability(
    'phantomjs.page.settings.userAgent', 
    'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36' 
); 

$driver = RemoteWebDriver::create($host, $capabilities,5000); 

$window = new WebDriverDimension(1024, 768); 
$driver->manage()->window()->setSize($window); 
@chmod('/usr/share/nginx/html/php-webdriver/cookies.txt',0777); 

$driver->get('https://facebook.com'); 

foreach($cookies as $cookie) 
    $driver->manage()->addCookie($cookie); //here i'm trying to add cookie 

$driver->wait(10,1000)->until(
    WebDriverExpectedCondition::presenceOfAllElementsLocatedBy(
     WebDriverBy::xpath('.//input[@id="email"]') 
    ) 
); 

$inputUsername = $driver->findElement(
    WebDriverBy::xpath('.//input[@id="email"]') 
); 
$inputUsername->sendKeys('<your username>'); 

$driver->wait(10,1000)->until(
    WebDriverExpectedCondition::presenceOfAllElementsLocatedBy(
     WebDriverBy::xpath('.//input[@id="pass"]') 
    ) 
); 

$inputPassword = $driver->findElement(
    WebDriverBy::xpath('.//input[@id="pass"]') 
); 
$inputPassword->sendKeys('<your password>'); 

$driver->wait(10,1000)->until(
    WebDriverExpectedCondition::presenceOfAllElementsLocatedBy(
     WebDriverBy::xpath('.//label[@id="loginbutton"]') 
    ) 
); 

$button = $driver->findElement(
    WebDriverBy::xpath('.//label[@id="loginbutton"]') 
); 
$button->click(); 

$driver->takeScreenshot('./screen.png'); 
?> 

如何一個可以按照頁面重定向和phantomjs持續不斷設置瀏覽器的用戶代理和監控響應頭不斷設置cookie信息到瀏覽器?

回答

相關問題