LINUX.ORG.RU

Такой большой, а не знаешь, как боты работают :)

timur_dav ☆☆☆☆☆
()

bash + wget/curl + sed/awk

+1

или Mechanize (например, на перле)
или HtmlUnit
или PhantomJS
или Selenium
...тысячи их!

kovrik ★★★★★
()

Боюсь твоих навыков для автоматического распознавания капчи просто не хватит, раз задаешь такие вопросы. Воспользуйся какой нибудь антикапчей. За деньги, да, но эффективно.

А так, любой скриптовый язык который умеет работать с http(s).

Orlangoor ★★★★★
()

Сформировать и отправить POST-запрос согласно протокола должен уметь любой язык. Ты бы хоть намекнул, что есть в распоряжении.

Munhgauzen
()
Ответ на: комментарий от Nxx

Готовой программы? У меня нет. Несколько лет назад ботоводил и эксплуатировал по этой схеме дырки в eRepublik. Алгоритм простой: формируем и отправляем post запросы, парсим пришедшие страницы.

aidaho ★★★★★
()
Ответ на: комментарий от Nxx

Метод запроса страницы в протоколе HTTP, подразумевающий отправку серверу некой информации (содержимое поля).

aidaho ★★★★★
()
Ответ на: комментарий от aidaho

Я просто не в курсе. А как ему указать, содержимое какого поля мы хотим отправить?

Nxx ★★★★★
() автор топика

Так тебе нужно сэмулировать поведение пользователя (открыть страницу, заполнить поля) или тупо засабмитить форму?

Для второго вгет более чем подходит, как уже говорили. Для первого, если у тебя мак, лучше всего годится AppleScript, хотя штуки вроде нокогири тоже ок.

Apple-ch ★★
()

По-моему это очень толстый троллинг.

Orlangoor ★★★★★
()
Ответ на: комментарий от Nxx

Подсмотреть на содержимое запроса при отправке его из браузера. Либо сниффером либо для удобства к браузерам можно прикручивать всякие плагины вроде Tamper data для Firefox.

aidaho ★★★★★
()
Ответ на: комментарий от Apple-ch

А в чем различие? Есть страница, там форма. Если заполнить и отослать - все ок. Надо, чтобы это делалось автоматически.

Nxx ★★★★★
() автор топика
Ответ на: комментарий от Nxx

Запустить в консоли?

Тогда такой файл:

#! /usr/bin/php
<?php

тут твой код

после дать скрипту:

chmod u+x ./скрипт.php

и запускать как обычно

Munhgauzen
()
Ответ на: комментарий от Munhgauzen

Спасибо, попробую разобраться.

Nxx ★★★★★
() автор топика

Код на перле:

use strict;
use utf8;

use WWW::Mechanize;
use HTTP::Cookies;

binmode(STDOUT, ":utf8");
binmode(STDIN, ":utf8");
binmode(STDERR, ":utf8");

# credentials
my $EMAIL = 'blablabla@blablabla.com';
my $PASSWD = 'blablabla';

# login page
my $LOGIN_PAGE = "https://somepage.com";
my $TARGET_PAGE = "https://somepage.com/index.html";

# path to save cookie
my $path = '/home/username/Desktop';
my $cookie_file = "$path/cookie";

my $cookie_jar = HTTP::Cookies->new;
my $mech = WWW::Mechanize->new(stack_depth => 0, cookie_jar => $cookie_jar, agent_alias => 'Windows Mozilla');

# if cookie doesn't exist
if (!(-e $cookie_file)) {
	print "No cookie found!\n";
	getCookie();
}

# got cookie! 
# getting required page
my $content = $mech->get($TARGET_PAGE);
print $content, "\n";

##########################################################
# login and get cookie
##########################################################
sub getCookie {
	# go to login page
	$mech->get($LOGIN_PAGE);
	
	# form fields
	my $fields = {'email' => $EMAIL, 'password' => $PASSWD};
	$mech->submit_form(form_id => 'login_form', fields => $fields);
	#$mech->submit_form(form_number => 1, fields => $fields);

	die "[ERROR]: Failed to login!\n" unless ($mech->success);
	# save cookies
	$cookie_jar->save($cookie_file);
}

kovrik ★★★★★
()
Ответ на: комментарий от Nxx

Придёт в ответ на запрос.
Чтобы не тупить, рекомендую открыть и прочитать маны по html, bash, wget, sed.
Я не читал, просто поиском находил интересующие вопросы и быдлокодил на ходу.

aidaho ★★★★★
()
Ответ на: комментарий от Nxx

Капчи там нет! Веб-страница ничем не защищена.

ну и в чём сложность? curl умеет и POST и GET запросы. У меня на форуме вроде валялся пример бота.

drBatty ★★
()
Ответ на: комментарий от kovrik

Логика такая: есть сайт. На нем 2 страницы - на 1й авторизация, а вторая - та, на которую нужно попасть после авторизации. Сначала проверяем, не существует ли у нас сохраненной куки для этого сайта. Если нет, то получаем куку - идем на страницу авторизации, заполняем форму, сабмитим ее, сохраняем куку на диске и загружаем ее. Затем переходим на требуемую страницу и выводим ее содержимое (print $content).

Если нужно выводить не всю страницу, а только что-то конкретное, тогда нужно парсить HTML - например, с помощью HTML::TreeBuilder::XPath.

Перед запуском:

sudo cpan WWW::Mechanize
sudo cpan HTTP::Cookies
Затем прописываешь свои пути, адрес страницы, и тд. Правишь id/номер формы, поля, которые надо заполнить.

kovrik ★★★★★
()
Ответ на: комментарий от kovrik

Но если нужно только авторизоваться и вывести содержимое, то лучше через curl - намного проще.

kovrik ★★★★★
()

Если тебе для «домашнего» применения, то можно просто делать скрипт на баше с использованием xdotool.
Поднимаешь систему в виртуалке с браузером.
Далее просто по заранее заданным координатам эмулитуешь свое тыканье.

Капчу можно тоже легко грабить скриншотом с экрана, распозновать уже сказали где.
Запалить такого «бота» почти нереально, и в случае очень очень хитрого сайта работать он будет куда надежнее.

winddos ★★★
()
Ответ на: комментарий от winddos

Да, мой вариант на случай если защита таки есть и гемор есть с работой с curl.
Плюс он наверняка может быть проще, чем кодинг на любом языке :)

winddos ★★★
()

Тех-вопрос в толксах.
Что такое пост-запрос.

*facepalm*
Предлагаю прилюдно с позором сорвать звезды.

iSage ★★★★
()

Во-первых, это задача не для веб-дезингера; Во-вторых, она просто тривиальная.

1. Нужно открыть в браузере страницу с формой.
2. Открыть firebug (есть из-коробки в хроме и опере, в остальных легко прикручивается).
3. С включенным firebug (выбрать раздел network) отправляйте заполняйте форму и нажимаете кнопочку «отправить» или как она там называется.
4. Далее, в firebug-e появятся информация о всех запросах браузер списком, из этого списка нужно выбрать тот у которого «method: POST». Там будет информация о запросе, вам нужен раздел «Request body».
5. Из этого раздела нужно скопировать всю информацию в такой вот скрипт:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests

url = "http://example.com/"
form = {'name1': 'value1','name2': 'value2'}

req = requests.post(url, data=form)
print req.text

в строчку шесть. Ну и урл отредактировать (строчка 5).
6. нужно еще установить библиотеку python-requests. В suse это не проблема ;)
7. запустить скрипт из пункта 5:

$ python scriptname.py

beka
()
Ответ на: комментарий от winddos

Да, мой вариант на случай если защита таки есть и гемор есть с работой с curl. Плюс он наверняка может быть проще, чем кодинг на любом языке :)

может и проще, проблема в том, что там каую-нить точку дизайнер заменит, и бот в нужную кнопку не попадёт. Разве так сложно распарсить <form></form>?

drBatty ★★
()
Ответ на: комментарий от Nxx

Здесь что, все - веб-дизайнеры?

причём тут дизайн? дизайн как раз тебе не нужен, нужно просто распарсить форму запроса, а вот шелуху дизайнера надо как раз выкинуть в /dev/null, боту должно быть наплевать, как кнопка выглядит, и где находится, его цель послать запрос «кнопка ХХХ нажата».

drBatty ★★
()
Ответ на: комментарий от drBatty

Ну мало ли что ТСу надо.

Попробуй написать на курле бота для сервисов гугла, с ноля, поймешь о каких ситуациях я говорю.

winddos ★★★
()
Ответ на: комментарий от winddos

Ну мало ли что ТСу надо.

Попробуй написать на курле бота для сервисов гугла, с ноля, поймешь о каких ситуациях я говорю.

ну если посмотреть на посты ТСа, то там случай совсем примитивный, и ему достаточно 30и минутного вкуривания man curl. А с гуглом там случай ействительно сложный.

drBatty ★★
()
Ответ на: комментарий от drBatty

Да я просто увидел топик с обфусцированным js, и подумалось что моя рекомендация может быть полезна :)

winddos ★★★
()
Ответ на: комментарий от beka

Далее, в firebug-e появятся информация о всех запросах браузер списком, из этого списка нужно выбрать тот у которого «method: POST».

Так. Появились, но там только GET.

Nxx ★★★★★
() автор топика

так, ТС, сначала внимательно прочитай RFC по протоколу HTTP, потом обзорно про HTML в любой книжке для чайников. Если после этого не будет понятно, как написать сабжевую программу, то тут уже ничем помочь нельзя

Harald ★★★★★
()
Ответ на: комментарий от Nxx

Если в форме нет конфиденциальной информации, то можете скопипастить исходный код страницы с формой (до того как все заполнить и отправить) и выложить на пастебин, чтобы я посмотрел.

Если эту страницу не хочется «светить» - то все как я расписал, только в этом списке нужно найти ту страницу куда вас форма переправляет, там будет информация, которую нужно вставить в мой скрипт.

beka
()
Ответ на: комментарий от beka

Всё! получилось. В выводе программы содержится нужная инфа. Осталось только выучить Питон, чтобы разобраться, как эту строчку вычленить из этого вывода и сделать программу интерактивной.

Nxx ★★★★★
() автор топика
Ответ на: комментарий от Nxx

Если ответ приходит в формате html - то я недавно как раз об этом написал.

Если в другом формате - то либо соответствующую формату либу использовать, либо же через регулярки.

beka
()
Ответ на: комментарий от beka

Только что работало.

Nxx ★★★★★
() автор топика
Ответ на: комментарий от iSage

Тех-вопрос в толксах.

Что такое пост-запрос.

Здесь что, все - веб-дизайнеры?

Инициативу поддерживаю.

anonymous_
()
Ответ на: комментарий от Nxx

Надеюсь вы сам скрипт назвали не «requests.py»?

В консоли, перейдите, пожалуйста, в директорию со скриптом, и покажите мне результат вот такого ввода:

$ python
>>> import requests
>>> requests
... вот что оно тут напишет
>>> requests.post
... и вот тут тоже что-то напишет

beka
()
Ответ на: комментарий от beka

Какая-то свистопляска. Запускаю один файл - запускается совсем другой, выводит то, чего в запускаемом файле нет. Создает .pyc файл с другим именем. Сейчас когда в питоновской консоли даю команду import requests начинается запуск того файла без остановки.

Свистопляска началась, когдя я переименовал файл с программой.

Nxx ★★★★★
() автор топика
Ответ на: комментарий от beka

На import requests выводит приглашение моей питоновской программы, которую я даже не запускаю.

Nxx ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.