Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2015, 13:43   #1
Veemankm
 
Регистрация: 23.07.2012
Сообщений: 7
По умолчанию Заполнение полей на html странице в Webbrowser

Доброго дня уважаемые программисты.

Уже второй день не могу решить проблему с загрузчиком.
Программа нужна для добавления файлов в обменник. Работаю со страницей: http://my.wape.ru/myfiles/upload.php

Вот листинг html страницы:

Код:
<head><link rel="icon" href="http://wape.ru/icon.ico" type="image/x-icon" /><meta name="keywords" content="wap обменник загрузки мобильный обмен видео музыка mp3 бесплатно эротика игры скачать opera mini 3gp myfiles файлообменник" />
<meta name="description" content="WAPE.RU - Музыка mp3, обмен видео, Файлообменник, эротика, игры. Бесплатно. Без регистрации." /><title>Добавить файлы</title><script src="http://my.wape.ru/myfiles/js/files_check_del.js" type="text/javascript"></script><script type="text/javascript" src="http://my.wape.ru/myfiles/js/jquery-1.11.1.min.js"></script>
.....
....
......
<textarea style="width: 100%; margin: 0px; padding: 4px 0px; vertical-align: middle;line-height: 100%;border: 1px solid #ccc;" name="discription" maxlength="200" rows="5"></textarea><br/></tr></td><tr><td>Выбрать файл<br/><input type="file" name="user_file" value="" style="width: 100%; margin: 0px; padding: 4px 0px; vertical-align: middle;line-height: 100%;border: 1px solid #ccc;" /><br/></td></tr>
<tr><td>
......
......
В строке user_file это строчка под путь файла на компьютере. Если в браузере на неё нажать появляется диалоговое окно с выбором из каталога файлов - меня такой вариант не устраивал.

Код:
<input type="file" name="user_file" value=""[/B] style="width: 100%; margin: 0px; padding: 4px 0px; vertical-align: middle;line-height: 100%;border: 1px solid #ccc;" /><br/></td></tr>
Пытался решить вопрос:
Код:
a:=webbrowser1.oleobject.document.getelementbyid('user_file');
a.value:='"' + GetCurrentDir + '\img\' + Listbox1.Items.Strings[2] + '"'; // адрес файла в user_file
Увы результата не дало. (логично!)

Как в эту строку вставить адрес файла (в общем переменную текстовую)? Можно ли вводить переменную через функцию JS? Если такой вариант возможен, прошу набросать пример. Буду благодарен.
Veemankm вне форума Ответить с цитированием
Старый 12.01.2015, 14:22   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Выкиньте браузер и отправьте POST запрос сами (indy/synapse).

input type file нельзя так просто заполнить через JS и т.п.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 12.01.2015, 15:51   #3
Veemankm
 
Регистрация: 23.07.2012
Сообщений: 7
По умолчанию

Примерно так должно выглядить:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
PostData:TStringList;
html:WideString;
begin
try
PostData:=TStringList.Create;
PostData.Clear;
PostData.Add('user_file=GetCurrentDir + '\img\' + Listbox1.Items.Strings[2]');
html:=IdHTTP1.Post('www.my.wape.ru/myfiles/upload.php',PostData);
PostData.Free;
except
on e:Exception do
PostData.Free;
end;
end;

Ранее с инди компонентами не работал, поэтому это для меня нова. Сам код пока не тестил, делфи под рукой нет. Делал из примера.

Прошу поправить, если что не так...
Veemankm вне форума Ответить с цитированием
Старый 12.01.2015, 17:15   #4
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Тот сервер куда он передает файл требует ввода капчи. Поэтому позаботься о ее вводе.
А все остальные параметры что отходят на сервер возьми и отснифери! Если ты знаеш что такое снифер.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 12.01.2015, 17:19   #5
Veemankm
 
Регистрация: 23.07.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от NIKOLAYY2 Посмотреть сообщение
Тот сервер куда он передает файл требует ввода капчи. Поэтому позаботься о ее вводе.
А все остальные параметры что отходят на сервер возьми и отснифери! Если ты знаеш что такое снифер.
У меня авторизация профиля есть. При входе, капча исчезает.

Снифером перехватил запрос отправки файла post, но не могу разобраться, что к чему.
Veemankm вне форума Ответить с цитированием
Старый 12.01.2015, 18:10   #6
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Цитата:
Veemankm Снифером перехватил запрос отправки файла post, но не могу разобраться, что к чему.
Ну и приложил бы сюда снимок снифера, я все равно на том сервере не авторизован, поэтому хоть у меня снифер и есть он ни чего не даст.
Ты если отправляеш файл из браузера, зачем тебе вот эта штука?

Код:
a:=webbrowser1.oleobject.document.getelementbyid('user_file');
a.value:='"' + GetCurrentDir + '\img\' + Listbox1.Items.Strings[2] + '"'; // адрес файла в user_file
Отправляй просто из самого webbrowser да и все.

А если будеш использовать IdHttp то используй его с объектом TIdMultipartFormDataStream. Этот объект имитирует форму для отправки в делфи. Поще сказать тот сайт который примет файл он будет думать что файл пришел из браузера, а не из какой-то программы.

Например вот так сайт (php-скрипты сайта) поймут что файл пришел из браузера Mozilla пятой версии.

Код:
IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36';
Зачем это нужно. А затем что создатели крупных файлообменных сайтов очень хитрые люди (сделают все чтобы из различных программ невозможно было отослать файл на их сервер, борьба с автоматизмом так сказать у них, это грузит ихний сайт) и ты при отправке файла должен учесть все и даже больше! (сервер все проверяет).
Ты должен быть в своем развитии всегда на шаг быть впереди.

Я много таких программ делал которые отсылали файлы на файлообменники, но через некоторое время они переставали работать, а почему переставали - да потому что там на сервере добавляли в очередной раз новую защиту, новую проверку (например новое скрытое поле)

В общем изучи объект TIdMultipartFormDataStream если он тебе нужен.

Последний раз редактировалось NIKOLAYY2; 12.01.2015 в 18:16.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 12.01.2015, 18:17   #7
NIKOLAYY2
Форумчанин
 
Регистрация: 23.12.2014
Сообщений: 220
По умолчанию

Veemankm
То что ты написал в #3 посте- это филькина грамота. Это чистый пост-запрос на сервер, и к отправке файла на сервер он вобще никаким боком непричастен.

Вот тебе нашел пример что по проще. Загрузить файл на сервер из Delphi методом POST:
http://ru.neospy.net/forum/viewtopic.php?f=14&t=68
И запомни в твоем случае TIdMultipartFormDataStream рулит!

Последний раз редактировалось NIKOLAYY2; 12.01.2015 в 18:28.
NIKOLAYY2 вне форума Ответить с цитированием
Старый 12.01.2015, 18:47   #8
Veemankm
 
Регистрация: 23.07.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от NIKOLAYY2 Посмотреть сообщение
Veemankm
То что ты написал в #3 посте- это филькина грамота. Это чистый пост-запрос на сервер, и к отправке файла на сервер он вобще никаким боком непричастен.

Вот тебе нашел пример что по проще. Загрузить файл на сервер из Delphi методом POST:
http://ru.neospy.net/forum/viewtopic.php?f=14&t=68
И запомни в твоем случае TIdMultipartFormDataStream рулит!
Спасибо. Вот такого расширенного ответа я ждал. Буду пробывать. Как проблему решу или будет вразумительный код, но возникнут вопросы, обязательно отпишу.

Ещё раз благодарен за помощь! Есть от чего отталкиваться.
Veemankm вне форума Ответить с цитированием
Старый 13.01.2015, 18:49   #9
Veemankm
 
Регистрация: 23.07.2012
Сообщений: 7
По умолчанию

Всем доброго дня!

Проблема решена.

На будущее остальным:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
str: TStringList;
bufer, url_up: string;
Stream: TIdMultipartFormDataStream;
begin
IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 5.1; rv:34.0) Gecko/20100101 Firefox/34.0';
IdHTTP1.Request.Accept := 'text/html';
str := TStringList.Create;
str.Add(Ansitoutf8('l=' + 'shrusha'));
str.Add(Ansitoutf8('p=' + 'nysha'));
str.Add(Ansitoutf8('aut=' + '1'));
Form1.IdHTTP1.HandleRedirects := True;
bufer := IdHTTP1.Post('http://my.wape.ru/myfiles/index.php', str);
bufer := IdHTTP1.Get('http://my.wape.ru/myfiles/upload.php');
if AnsiPos('Âûõîä', Utf8ToAnsi(bufer)) <> 0 then
begin
ShowMessage('Àâòîðèçèðîâàëèñü');
end
else
ShowMessage('Ïðîâåðüòå ëîãèí/ïàðîëü');
str.Destroy;

url_up:='C:\Users\user\Desktop\mywape\img\344.jpg';
Stream := TIdMultipartFormDataStream.Create;
 try
   Stream.AddFormField('discription',Ansitoutf8('Êðóòàÿ ïîðíóøêà'));
   Stream.AddFormField('xxx',Ansitoutf8('1'));
   Stream.AddFormField('act',Ansitoutf8('1'));
   Stream.AddFile('user_file', url_up, 'image/jpeg');
   IdHTTP1.HandleRedirects := True;
   Memo1.text:=Form1.IdHTTP1.Post('http://my.wape.ru/myfiles/upload.php', Stream);
 finally
   Stream.Free;
 end;

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

Всем спасибо за подсказки. Post запросы рулят=) Webbrowser ложу на полку=)

Последний раз редактировалось Veemankm; 13.01.2015 в 20:31.
Veemankm вне форума Ответить с цитированием
Старый 13.01.2015, 19:28   #10
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Оооо!!! Ты реальные логин - пароль выложил)))
Iron Monk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HTML код НА HTML странице NewLamer&Programer Помощь студентам 3 10.05.2013 17:21
Заполнение полей (input) imax228 Работа с сетью в Delphi 0 17.09.2012 23:02
Заполнение полей на сайте redcouch Общие вопросы C/C++ 0 15.07.2010 22:00
Выполнить скрипт на странице в WebBrowser rangel Работа с сетью в Delphi 2 09.03.2010 14:39
Поиск по странице в WebBrowser Port 111 Работа с сетью в Delphi 2 15.01.2009 03:44