Автоматическое заполнение формы на чужом сайте
Нуждаюсь в совете разбирающегося в php.
Задача такая:
на чужом сайте есть простая форма: текстовое поле
и кнопка submit. Мне известен только url этого сайта.
У меня есть сообщение, которое нужно автоматически разместить в это текстовое поле и автоматически нажать submit на этом чужом сайте.
Повторю, мне неизвестно не имя полей, не имя формы, а только url этого сайта.
Как такое сделать?
а эти параметры как-нибудь автоматически можно получить?
Открыть страницу, разложить её в каком-то DOM-анализаторе, и разобрать нужную форму. Но, тут автоматика весьма относительная... Программа-то никогда не узнает, какое поле чему соответствует.
а эти параметры как-нибудь автоматически можно получить?
Прошу прощения за оффтоп. Спамом решил подработать?:)
Прошу прощения за оффтоп. Спамом решил подработать?:)
И к бабке не ходи - ясно, ясно как божий день.
У меня условная задача: создать систему рассылки объявлений в бесплатные доски объявлений.
Решать ее не нужно, нужно только описать алгоритм.
Я все детали продумал, дошел до того как в назначенную минуту достать нужное сообщение из БД, а вот как засабмитить его на форму пока не придумал. По идее подразумевается, что пользователь не знает параметров формы.
Думал может через ХМL можно.
Если кто идею знает или может ссылку дать - помогите, очень нужно, да и задачу на половине бросать не охота.
У меня условная задача: создать систему рассылки объявлений в бесплатные доски объявлений.
Дык, это-то мы уже и поняли. Уж это-ли не спам?
Я все детали продумал, дошел до того как в назначенную минуту достать нужное сообщение из БД, а вот как засабмитить его на форму пока не придумал. По идее подразумевается, что пользователь не знает параметров формы.
Думал может через ХМL можно.
Пойми: чудес не бывает. Ты можешь автоматизировать только процесс получения формы для её дальнейшей обработки и отправки своих данных её скрипту. Но вручную нужно поля этой формы сопоставить со своими полями. Т.е., фактически - 1 раз сопоставить с 1й формой. Зато потом будешь её пользовать налево-направо, пока админ ТОЙ доски не закроет вообще твой IP на свой сайт.
Т.е. если я правильно понял:
имя полей и (название формы или action) должны быть известны заранее.
Далее при отсылке можно сформировать ссылку через метод get, типа: ...?имя_поля=сообщение&текст_сообщения=мое сообщение и т.д.
А потом на выбор:
1)вызываем метод submit формы чужого сайта(только как это сделать из моего скрипта не знаю - если знаешь, то скажи плиз)
2) либо сразу эту строку подавать на action формы чужого сайта.
Я в принципе сразу так подумал, но хотелось удивить и предложить универсальный способ.
Тем более, говорят, вроде можно и автоматически все сделать - может от незнания.
Ну а идею я правильно понимаю?
Если есть тонкости - ткни на них пожалуйста.
ok man.
Т.е. если я правильно понял:
имя полей и (название формы или action) должны быть известны заранее.
Далее при отсылке можно сформировать ссылку через метод get, типа: ...?имя_поля=сообщение&текст_сообщения=мое сообщение и т.д.
А потом на выбор:
1)вызываем метод submit формы чужого сайта(только как это сделать из моего скрипта не знаю - если знаешь, то скажи плиз)
2) либо сразу эту строку подавать на action формы чужого сайта.
Я в принципе сразу так подумал, но хотелось удивить и предложить универсальный способ.
Тем более, говорят, вроде можно и автоматически все сделать - может от незнания.
Ну а идею я правильно понимаю?
Если есть тонкости - ткни на них пожалуйста.
в целом имхо правильно.
можно сразу подавать на экшин формы чужого сайта, если получиться, если это не противоречит скрипту формы :).
по идее можно, и не зная заранее, анализировать поля формы чужого сайта, но это скорее уже из области искуственного инетелекта.
если же есть куча одинаковых форм, то да, достаточно будет узнать суть одной. на остальные уже заходить не надо будет.
ok man.
Т.е. если я правильно понял:
имя полей и (название формы или action) должны быть известны заранее.
Далее при отсылке можно сформировать ссылку через метод get, типа: ...?имя_поля=сообщение&текст_сообщения=мое сообщение и т.д.
А потом на выбор:
1)вызываем метод submit формы чужого сайта(только как это сделать из моего скрипта не знаю - если знаешь, то скажи плиз)
2) либо сразу эту строку подавать на action формы чужого сайта.
Я в принципе сразу так подумал, но хотелось удивить и предложить универсальный способ.
Тем более, говорят, вроде можно и автоматически все сделать - может от незнания.
Ну а идею я правильно понимаю?
Если есть тонкости - ткни на них пожалуйста.
1) При чем тут GET?
2) По хорошему можно и не знать название полей. Как привило поля называют очеень похожими словами, так что если создать базу типичных слов, то можно и автоматически вычислить, что чего какое поле. Правда полной гарантии это не даст, но для очень значительного перечня сайтой результат будет какой нужно. К тому же, в форме поле с сообщением задано тегом TEXTAREA так что даже название для этого поля знать не обязательно. TEXTAREA и будет поле для сообщения.
Но тут есть другая тонкость: картинка на сайте. Движок просто не пропустит POST данные без некоего кода написанного на картинке. Так что весь смысл такого скрипта для значительной части сайтов (а сейчас этот метод защиты очень популярен) попросту пропадает. Конечно такого бота можно оснастить OCR (т.е. алгоритмом распознавания букв и цифр на картинке, как в FineReader) которая ПОПЫТАЕТСЯ обойти такого вида защиту.
с той, что формируется при передачи с формы посредствам get-метода. Поэтому и get:)
2) Защиты картинками в той задаче, которую я решаю - нет.
Видишь, alekciy, в твоем решении тоже нужно знать параметры формы или переберать их.
Я к чему это все - видел в инете рекламу программ типа roboform, где обещают универсальность, поэтому и подумал, что
существует универсальный способ.
Я к чему это все - видел в инете рекламу программ типа roboform, где обещают универсальность, поэтому и подумал, что
существует универсальный способ.
Те, кто пишет эти робоформы берут деньги за то, что облазили тысячи сайтов и экстрадировали из них нужное для своей программы. Универсальность они предлагают - это непонятно для потребителя. Ты вот купился. Я, как человек чуть более подкованный, знаю физические основы этой ущниверсальности. Просто иного пути нет. Разве что владельцы сайтов будут тебе предоставлять свои данные о полях, методах и путях скриптов.
Посмотреть в ручную можно, однако в этом случае теряется универсальность программы. Пользователь должен будет сначала выбрать сайт, на который отправляется объявление (т.е. его форму), а затем отправить на него сообщение.
А можно как-то автоматически получить хтмл-код?
В этом случае придется писать анализатор этого кода. Вдруг на странице несколько форм, а мне нужна только последняя?
Т.е универсальность получается сомнительная.
Видишь, alekciy, в твоем решении тоже нужно знать параметры формы или переберать их.
Нифига знать не обязательно. Достаточно в теле страницы найти тег FORM. Короче парсируем и анализируем страницу. Вообще Ananim уже верно высказался.
А можно как-то автоматически получить хтмл-код?
Требуем страницу с сервера и все. Сеть это связанные между собою нитью ссылок боооольшой ресурс ))) (HTML-то помнишь как расшифровывается).
Между прочим "Мне известен только url этого сайта.". ;)
Если ты не спамер, тебе анализатор и не нужен.
В этом случае придется писать анализатор этого кода.
А ты для какой задачи хочешь обойти без анализатора? )))
Вдруг на странице несколько форм, а мне нужна только последняя?
Мда... покажитека мне сайте, где их много ))) Форма для размещения теста на странице КАК ПРАВИЛО бывает одна.
к чему это все - видел в инете рекламу программ типа roboform,
Так в чем проблема? Уверен, что она универсальная: купи её!
Если судить по рекламе, то панацею уже изобрели, все болезни побеждены, мы гоняем на универсальных машинах, едим сбалансированню пищу которая полезная и придает нам новых сил... Просто удивительно, что при все при этом я еще не в раю.
Т.е универсальность получается сомнительная.
Неужели приходит понимание, что универсум недостижим?
Это я так.
Я понимаю, что мы можем получить страницу по url
:), но я не знаю как получить код этой страницы как текст, сделать его доступным для такой обработки, т.е. чтобы можно было искать в нем слова и т.д.
Я слышал CGI может оказаться полезным в данном случае, это так?
Мда... покажитека мне сайте, где их много ))) Форма для размещения теста на странице КАК ПРАВИЛО бывает одна.
Ну как же? Вот, к примеру страница, где я сейчас пишу этот ответ: я уже насчитал три формы - подписка на рассылку, поиск и, собственно форма, в которой я сейчас пишу.
Опыт сын ошибок трудных.
Это я так.
Я понимаю, что мы можем получить страницу по url
:), но я не знаю как получить код этой страницы как текст, сделать его доступным для такой обработки, т.е. чтобы можно было искать в нем слова и т.д.
Я слышал CGI может оказаться полезным в данном случае, это так?
Попробуй
но я не знаю как получить код этой страницы как текст, сделать его доступным для такой обработки, т.е. чтобы можно было искать в нем слова и т.д.
:D
Это как раз самое простое. shaelf тут полностью прав. Читай внимательнее маны.
fopen() закрепляет именованый ресурс, указанный в аргументе filename, за потоком. Если filename передан в форме "scheme://...", он считается URL'ом и PHP проведёт поиск обработчика протокола (также известного как "обвёртка") для этой схемы. Если ни одна обвёртка не закреплена за протоколом, PHP выдаст замечание чтобы помочь вам отследить потенциальную проблему в вашем скрипте и продолжит выполнение, будто filename указывает на обыкновенный файл.
все-таки получится через fp=fopen("http://ya.ru","r")
получить доступ к коду или нет.
Если нет - то как?
А если на еще более бытовом уровне:
все-таки получится через fp=fopen("http://ya.ru","r")
получить доступ к коду или нет.
Если нет - то как?
"В сад сударь, в сад!" (с) Трое в лодке не считая собаки.
Все же для начала стоит почитать документацию на РНР. Элементарнейший пример скрипта который получает содержимое страницы в виде строки. Потому это строку уже можно анализировать (к примеру пройтись по ней рядом регулярных выражений.
$file = file_get_contents ('http://alekciy.ru');
print $file;
?>
Таки образом мы получает доступ к HTML коду, но не как к РНР коду, если ты это имешь в виду. Да и РНР код в данной задаче СОВЕРШЕННО НЕ НУЖЕН. В остальном как я уже сказал... в сад! сад!
я хочу такой вариант предложить -
В ПС задается таблица со стандартными данными: имя, телефон, адрес...
Пользователь вводит новый урл, на который ему нужно закинуть объявление.
Программа: на этом урл'е такие-то поля: $phone, $name... Почти всегда имя соответсвует содрержанию. Как правило.
И дальше юзер вручную говорит: вот поле $name соответсвует полю "Имя" в моей таблице данных, его нужно заполнить значением из этой колонки и т.д.
Есть в этом здравый смысл?
А как по-другому.
Если через DOM-анализатор проще, то плиз, скажи как это устроить.
А то я раньше с этим не сталкивался.
Это иллюстрация, как можно вообще разобрать любой HTML-документ, чтобы получить из него что-то нужное.
Тебе нужны формы с их полями - вот тебе формы с полями input. Как чего и с кем сопоставить - думай дальше сам.
$HTML = file_get_contents('http://forum.codenet.ru/newreply.php?s=&action=newreply&postid=138373');
$doc = new DOMDocument();
$doc->loadHTML('<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">' . $HTML);
$doc->formatOutput = true;
$xml = new DOMDocument("1.0", "windows-1251");
$forms = $xml->createElement("forms");
$xml->appendChild($forms);
foreach($doc->getElementsByTagName("form") as $form){
$xmlForm = $xml->createElement("form");
setAttributes($xmlForm, $form->attributes);
$forms->appendChild($xmlForm);
$inputFields = $form->getElementsByTagName("input");
foreach($inputFields as $input){
$xmlInput = $xml->createElement("input");
setAttributes($xmlInput, $input->attributes);
$xmlForm->appendChild($xmlInput);
}
}
echo $xml->saveXML();
function setAttributes(&$element, $DOMAttr){
foreach($DOMAttr as $attr){
if(removeAnotherAttributes($element->nodeName, $attr->name))
$element->setAttribute($attr->name, $attr->value);
}
}
function removeAnotherAttributes($nodeType, $attrName){
$attr = array(
'form' => array('action', 'method', 'name', 'id', 'enctype'),
'input' => array('name', 'id', 'type', 'value')
);
return in_array($attrName, $attr[$nodeType]);
}
А что такое DOMXML, который нужен для работы скрипта.
Я думаю, судя по вопросу, ты понял, что я не совсем разобрался в твоем скрипте.
Будь другом, скинь ссылку на какую-нибудь статью, которая поможет разобраться в твоем скрипте.
P.S. C праздником всех.
А что такое DOMXML, который нужен для работы скрипта.
Я думаю, судя по вопросу, ты понял, что я не совсем разобрался в твоем скрипте.
Будь другом, скинь ссылку на какую-нибудь статью, которая поможет разобраться в твоем скрипте.
Не, ну ты ж попробуй запустить. Сейчас DOM у всех должен быть. А уж PHP5 сразу с ним, как и с MySQL.
Что касается документации - см. тут - самое лучшее пособие
Насчет поддежки. Как правило он действительно включен, но бывает по разному. Что бы узнать, что же в данный момент поддерживается можно использовать такой скрипт:
<?php
echo phpinfo();
?>
что бы уж по ini не шариться.
Кстати mfender написал скрипт используя DOM. На 4-ой версии пыха с его DOM XML функции loadHTML нет.
Он использует 5 версию PHP.
Я бы заметил, что DOM XML функции это в PHP 4, в 5-ой версии это уже просто DOM функции.
.....
Кстати mfender написал скрипт используя DOM. На 4-ой версии пыха с его DOM XML функции loadHTML нет.
Ну да, ну да. Я их всегда путаю. DOM XML появился, если мне что-то не изменяет, в 4.4 версии, а в PHP5 его заменило другое расширение - DOM. Кстати, на мой субъективный взгляд, более удобное для работы.
Я действительно уже более полугода пользуюсь только PHP5. PHP4 - только в том, что уже на нём написано. Если есть новое и хорошее, то зачем пользоваться старым? Так что, уж не обессудьте...:)
если мне что-то не изменяет, в 4.4 версии
Изменяет. Поивилось это с 4.3.0.
Ну вопрос удобства всегда проистекает из привычки ;) К чему больше привык, то и удобнее.
Если же объективно то:
1) DOM XML сейчас не поддерживает и только вопрос времени его схода со сцены.
2) DOM XML допускает себе вольности в трактовке спецификации. DOM функции РНР уже полностью соответствуют требованиям спецификации DOM Level 2.
[COLOR=red]Нужны конструктивные предложения. Если это не гиперссылка, то следует приводить хотя бы цитату из указанного источника. Иначе - это спам и флуд.[/COLOR]
1) При чем тут GET?
2) По хорошему можно и не знать название полей. Как привило поля называют очеень похожими словами, так что если создать базу типичных слов, то можно и автоматически вычислить, что чего какое поле. Правда полной гарантии это не даст, но для очень значительного перечня сайтой результат будет какой нужно. К тому же, в форме поле с сообщением задано тегом TEXTAREA так что даже название для этого поля знать не обязательно. TEXTAREA и будет поле для сообщения.
Но тут есть другая тонкость: картинка на сайте. Движок просто не пропустит POST данные без некоего кода написанного на картинке. Так что весь смысл такого скрипта для значительной части сайтов (а сейчас этот метод защиты очень популярен) попросту пропадает. Конечно такого бота можно оснастить OCR (т.е. алгоритмом распознавания букв и цифр на картинке, как в FineReader) которая ПОПЫТАЕТСЯ обойти такого вида защиту.
Поделитесь ссылками на алгоритмы парсинга графических букв и цыфр. Заранее спасибо.
Поделитесь ссылками на алгоритмы парсинга графических букв и цыфр. Заранее спасибо.
На сколько мне известно, такого универсально скрипта еще не написано. А учитывая, что пользуються им спамеры, и слава богу, что ненаписано.
На сколько мне известно, такого универсально скрипта еще не написано. А учитывая, что пользуються им спамеры, и слава богу, что ненаписано.
Не любишь их?:) Хотя я бы не против, чтоб он был написан. Но я против того, чтоб его в паблик выложили... Хотя на сколько я знаю, то средствами PHP это сделать практически нереально (он не был предназначен для математический вычеслений, не функции есть конечно, но если загоняться по серьёзному, то он дохнет + время выполнения).
Не любишь их?:) Хотя я бы не против, чтоб он был написан. Но я против того, чтоб его в паблик выложили... Хотя на сколько я знаю, то средствами PHP это сделать практически нереально (он не был предназначен для математический вычеслений, не функции есть конечно, но если загоняться по серьёзному, то он дохнет + время выполнения).
А кто их любит то?
*напевает на мотив "Полковника" Би-2*
Эх, спамера ни кто не ждет,
Не пишет...
А написать тако можно только из академического интереса. Хотя есть конторы, которые заявляют, что у нах такой скрипт есть и даже продают его.
Насчет того, на сколько это реально реализовать... думается реализовать вполне реально. Другое дело, что на каждом сайте на картинках используются разные шрифты. Если придется скрипт обучать для каждого сайта, то попросту пропадет смысл такой "автоматизации". Хотя с другой стороны для стандартных движков форумов используються одни и теже шрифты в картинке, и тут скрипт может развернуться.
А кто их любит то?
Для меня любой взлом делится на 2 категории:
1. Совершил хакер (в исконном смысле этого слова)
2. Которое совершил скрипткид.
Пункт первый у меня вызывает уважение, второй отвращение.