Если есть представление о webdriver протоколе, то вопросов этих не возникло бы. Я к тому, что нужно просто прочесть спецификацию. А дальше пишется специализированный под конкретный сайт бот. К примеру, кусок из бота, процесс аутентификации:
/**
*
*/
public function login()
{
// Возможно мы уже залогинены
if ( $this->isLogin() ) {
return true;
}
$current_url = $this->_account->driver->getCurrentURL();
$this->_account->driver->get($this->login_page);
$html = $this->_account->driver->getPageSource();
if ( $this->isLogin($html) ) {
return true;
}
// Пытаемся найти требуемые для работы элементы
try {
$username = $this->_account->driver->findElement(\WebDriverBy::xpath('//input[@id="username"]'));
$password = $this->_account->driver->findElement(\WebDriverBy::xpath('//input[@id="password"]'));
$remember_me = $this->_account->driver->findElement(\WebDriverBy::xpath('//input[@name="autologin"]'));
$submit = $this->_account->driver->findElement(\WebDriverBy::xpath('//input[@name="login"]'));
} catch (\Exception $e) {
return false;
}
// Галочка автовхода
$remember_me->click();
// Задаем логин
$username->click();
$username->sendKeys($this->_account->login);
// Задаем пароль
$password->click();
$password->sendKeys($this->_account->password);
$submit->click();
$html = $this->_account->driver->getPageSource();
// Возможно нас забанили
if ( preg_match('~закрыт доступ к конференции~iu', $html) )
{
throw new AccountBannedException('Account #' . $this->_account->id . ' is banned');
}
// Возращаемся на исходную страницу
if ( !empty($current_url) ) {
$this->_account->driver->get($current_url);
}
return $this->isLogin($html);
}
Проблемы кук, параллельных сессий, распознавания решаются уже в рамках другой инфраструктуры, т.е. на уровне приложения.