Ответы пользователя по тегу PhantomJS
  • Где можно почитать мануалы по phantomjs и найти примеры сайтовых ботов?

    alekciy
    @alekciy
    Вёбных дел мастер
    Если есть представление о 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);
    }

    Проблемы кук, параллельных сессий, распознавания решаются уже в рамках другой инфраструктуры, т.е. на уровне приложения.
    Ответ написан
    Комментировать