@den4eg11

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

Появилась надобность избавится от различных расширений для автоматизации работы с сайтами и повесить всё на впс 24/7 с помощью node + phantomjs. Есть модуль, который прокладывает мост между нодой и фантомом. Хочу найти побольше информации про написание именно ботов, а не тестов. Есть ли где почитать? Или может у кого лежат примеры реально работающих ботов, которые не представляют никакой ценности? Авторизация, работа с импортированными куками, защита от распознавания
  • Вопрос задан
  • 569 просмотров
Пригласить эксперта
Ответы на вопрос 1
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);
}

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы