如何遵循页面重定向并使用phantomjs和php-webdriver持续设置恒定的浏览器useragent

Amachree Tamunoemi

我不知道我的逻辑是否正确,但这是我想解决的问题,即使用phantomjs无头浏览器和php-webdriver解决cookie所需的限制或无法通过auth登录页面(例如facebook)登录的问题。

完全可以,该第一个实例将在访问URL时将用户代理设置为浏览器的代理,但是可以通过重定向(通过meta或javascript重定向)到另一个页面来验证用户代理以及cookie,从而进行浏览器测试。

我从bpteam / php-cookie中提取了一个代码片段,以从预先配置的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信息不断设置给浏览器?

Amachree Tamunoemi

之所以会出现这种困难,是因为phantomjs不保留会话cookie,所以我遵循了此链接https://github.com/ariya/phantomjs/issues/12277上提供的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用cordova进行HTTP重定向,如何重新加载浏览器重定向到的页面?

来自分类Dev

Watir-Webdriver,PhantomJS和重定向到https的URL

来自分类Dev

设置页面滚动跨浏览器

来自分类Dev

硬刷新浏览器页面,然后使用javascript重定向到url

来自分类Dev

从UserAgent字符串解析浏览器和操作系统信息

来自分类Dev

如何获取twilio浏览器到浏览器通话时间的通话持续时间?

来自分类Dev

使用Selenium WebDriver Java绑定清除浏览器Cookies

来自分类Dev

根据浏览器语言设置进行清漆重定向

来自分类Dev

WebDriver.io:如何使浏览器暂停/等待?

来自分类Dev

使用Webdriver检查浏览器是否仍然打开

来自分类Dev

使用Selenium WebDriver运行TOR浏览器

来自分类Dev

如何重定向到登录页面,但仅在浏览器导航到页面时

来自分类Dev

如何使用C#在Header UserAgent属性中获取浏览器类型?

来自分类Dev

如果URL正在重定向,我的浏览器如何知道我已经访问过页面?

来自分类Dev

使用浏览器版本的webdriver

来自分类Dev

如何设置PhantomJS的浏览器语言

来自分类Dev

PHP Selenium Webdriver读取浏览器输出

来自分类Dev

设置页面滚动跨浏览器

来自分类Dev

如何重定向到特定浏览器上的页面?

来自分类Dev

HTTP位置:重定向-是否可以使浏览器的地址栏遵循URL?

来自分类Dev

如何设置默认浏览器?

来自分类Dev

浏览器如何设置html属性?

来自分类Dev

尝试使用javascript重定向页面,但浏览器下载页面

来自分类Dev

如何在Visual Basic 6中获取浏览器UserAgent字符串?

来自分类Dev

如何设置浏览器?

来自分类Dev

无法使用 Selenium Webdriver 启动 IE 浏览器

来自分类Dev

如何使用 PhantomJS 和 Selenium 浏览页面

来自分类Dev

如何让 selenium webdriver 停止打开浏览器?

来自分类Dev

浏览器控制台 - 如何在每个页面重定向中包含 javascript 代码?

Related 相关文章

  1. 1

    使用cordova进行HTTP重定向,如何重新加载浏览器重定向到的页面?

  2. 2

    Watir-Webdriver,PhantomJS和重定向到https的URL

  3. 3

    设置页面滚动跨浏览器

  4. 4

    硬刷新浏览器页面,然后使用javascript重定向到url

  5. 5

    从UserAgent字符串解析浏览器和操作系统信息

  6. 6

    如何获取twilio浏览器到浏览器通话时间的通话持续时间?

  7. 7

    使用Selenium WebDriver Java绑定清除浏览器Cookies

  8. 8

    根据浏览器语言设置进行清漆重定向

  9. 9

    WebDriver.io:如何使浏览器暂停/等待?

  10. 10

    使用Webdriver检查浏览器是否仍然打开

  11. 11

    使用Selenium WebDriver运行TOR浏览器

  12. 12

    如何重定向到登录页面,但仅在浏览器导航到页面时

  13. 13

    如何使用C#在Header UserAgent属性中获取浏览器类型?

  14. 14

    如果URL正在重定向,我的浏览器如何知道我已经访问过页面?

  15. 15

    使用浏览器版本的webdriver

  16. 16

    如何设置PhantomJS的浏览器语言

  17. 17

    PHP Selenium Webdriver读取浏览器输出

  18. 18

    设置页面滚动跨浏览器

  19. 19

    如何重定向到特定浏览器上的页面?

  20. 20

    HTTP位置:重定向-是否可以使浏览器的地址栏遵循URL?

  21. 21

    如何设置默认浏览器?

  22. 22

    浏览器如何设置html属性?

  23. 23

    尝试使用javascript重定向页面,但浏览器下载页面

  24. 24

    如何在Visual Basic 6中获取浏览器UserAgent字符串?

  25. 25

    如何设置浏览器?

  26. 26

    无法使用 Selenium Webdriver 启动 IE 浏览器

  27. 27

    如何使用 PhantomJS 和 Selenium 浏览页面

  28. 28

    如何让 selenium webdriver 停止打开浏览器?

  29. 29

    浏览器控制台 - 如何在每个页面重定向中包含 javascript 代码?

热门标签

归档