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信息到瀏覽器?