PDA

Просмотр полной версии : C# hidden frame


xixi
25.02.2013, 15:14
Собственно сабж, как прочитать? frame еще можно, но ссылка вроде:
webBrowser1.Document.All["username"].SetAttribute("value", "ваше значение");
Вообще не канают(

Zergatul
25.02.2013, 19:28
Ничего не понял

xixi
25.02.2013, 22:10
Вообщем есть сайт, есть форма логина, она расположена в скрытом фрейме. Как ввести туда данные и кликнуть програмно?

SeregaZ
25.02.2013, 23:41
не знаю твой с... но в браузере будем вспоминать жабаскрипт :) может натолкнет тебя на мысль:

так можно вбить значение:
<form name=temp>
<input name=text>
</form>

<script>
document.temp.text.value="123213";
</script>

если форма во фрейме, надо по моему добавить лишь имя фрейма. ща попробую...

Добавлено через 4 минуты
<body onload='document.bublik.temp.text.value="blablabl"'>

привет
<iframe name=bublik src=temp.htm></iframe>

эксплорер съел... а гугл хром сука :) видимо скрипт стартует еще до загрузки странички фрейма... видимо боди онлоад пашет в хроме не совсем точно... или хотя там надо мониторить онлоад фрейма...

Добавлено через 5 минут
и мозила не жрет :) вот суки привередливые... чтож быдлокод то не хавают :)

Добавлено через 28 минут
во! круто так расписано в последнем... я правда нихрена не понял, но очень понравилось :)
http://javascript.ru/forum/events/10748-kak-prisvoit-znachenie-ehlementu-formy-materinskogo-okna-iz-dochernego-2.html

Добавлено через 3 минуты
ах да... послать:

document.bublik.temp.submit;
//или
document.bublik.temp.submit();
//я не уверен

Zergatul
26.02.2013, 01:32
Если айфрейм на левом домене, то работает политика безопасности, которая не позволяет скриптам доступатся к айфрейму чужому. Хз как это обходить через объект веб-браузера.

Добавлено через 17 минут
А если все ок, тогда где то так как SeregaZ пишет:

((IFrame)webBrowser1.Document.getElementById("iframe id")).Document.All["username"].bblablabla

Я давно этим занимался, названия классов взяты случайно

SeregaZ
26.02.2013, 02:08
так надо значит довшить в страничку свой код, чтобы он думал что это родной на том сервере :) например Proxomitron. работает как прокси сервер между браузером и интернетом. если в процессе получения кода странички в этом самом коде повстречался нужный нам фрагмент, который мы будем подменять - то здесь происходит наше "вшитие". он дописывает наш код куда надо, и после браузер получает наш фиксенный код, думая что он такой и был на сервере и запускает его без этой проблемы с безопасностью.

xixi
27.02.2013, 17:31
Чтобы было проще дам адрес - cam bridgelms.org.... (пробел убрать)

SeregaZ
27.02.2013, 18:21
и чего куда там вбивать то?

Добавлено через 14 минут
видимо в login.htm? ну тогда ваще все просто :) в проксимитроне берем и создаем правило на эту страничку. типа чтоб искал на ней </form>
и подменил эту форм на что-то типа:

</form>
<script>
document.fm1.username.value="moylogin";
</script>

после чистим кэш, и заходим в браузере, запущенном через проксимитрон, на страницу :) там в поле логина будет красоваться наш логин.

xixi
12.03.2013, 08:43
Дык я пишу программу, которая должна сама это делать. Програмным способом вводить логин и пароль и проходить авторизацию.

SeregaZ
12.03.2013, 13:39
понятно

xixi
14.03.2013, 10:41
Вот бьюсь уже месяц, никак дальше не идет...

s2lx
12.04.2013, 21:10
webBrowser1.Navigate("https://www.cambridgelms.org/p/splash");
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser 1_DocumentCompleted);
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}

if (webBrowser1.Document != null)
{
var frame = webBrowser1.Document.Window.Frames["cas_iframe"];

frame.Document.GetElementById("username").InnerText = "12345";
frame.Document.GetElementById("password").InnerText = "6789067";
HtmlElementCollection col = frame.Document.GetElementsByTagName("button");
foreach (HtmlElement el in col)
{
if (el.GetAttribute("className") == "clms-small-btn")
{
el.InvokeMember("click");
}
}
}

Добавлено через 23 минуты
Можно так же методом get post
Сначала делаем GET запрос на получение страницы и Cookies/
Затем отправляем POST
/cas/login?page=splashpage&target=top&service=http://www.cambridgelms.org/p/cas username=12345&password=6789067&submit=&lt=_cFD56A6C9-FE79-4412-323D-953192D51A01_k520F407E-388E-1A19-63F7-D65E360CA5AD&_eventId=submit
то что красным это свои данные(логин/пароль) и то что придёт по первому запросу
И конечно не забываем добавлять пришедшие куки.
Во втором варианте кода конечно выходит больше, но работает быстрее т.к. не грузит графику.

xixi
12.04.2013, 21:57
lt=_cFD56A6C9-FE79-4412-323D-953192D51A01_k520F407E-388E-1A19-63F7-D65E360CA5AD
Данная вещь генерируется динамически и пост запросом ее не возьмешь. Причем она выдается не как статика, а как динамика. В этом и есть вся проблема была. Либо мучаться и генерировать данную вещь, либо сделать клиентским методом и облегчить себе жизнь.

s2lx
12.04.2013, 22:17
lt=_cFD56A6C9-FE79-4412-323D-953192D51A01_k520F407E-388E-1A19-63F7-D65E360CA5AD
Данная вещь генерируется динамически и пост запросом ее не возьмешь. Причем она выдается не как статика, а как динамика. В этом и есть вся проблема была. Либо мучаться и генерировать данную вещь, либо сделать клиентским методом и облегчить себе жизнь.
Наверное если говорят, что можно сделать, значит можно допустить, что сделать можно!
Её не нужно генерировать, она приходит в ОТВЕТЕ на ЗАПРОС...в этом frame, что с логин-пароль-кнопка.

Раз не знаешь как используй первый вариант - он рабочий.
Помог бы и со вторым вариантом, но раз уж человек говорит с такой уверенностью(вместо благодарности или хотя бы вопроса "как?"), то помогу и с ним,
НО теперь уже за оплату!!!

Zergatul
13.04.2013, 12:33
Вот это нормальный подход (судя по скрину вижу HttpWebRequest). Давно на него перешел, когда нужно что-то автоматизировать в веб. Раньше так же мучался с WebBrowser.

SeregaZ
13.04.2013, 14:31
во! выйду из зап... из творческого кризиса - засяду за бота к чату :) раньше он работал тупо на подмене сервера со скриптами. подход непутевый, ненадежный, неудобный, криворукий - но работало и я был доволен :) однако надо бы перейти на новый уровень понимания этих сетевых штучек-дрючек.

xixi
14.04.2013, 05:18
Наверное если говорят, что можно сделать, значит можно допустить, что сделать можно!
Её не нужно генерировать, она приходит в ОТВЕТЕ на ЗАПРОС...в этом frame, что с логин-пароль-кнопка.

Раз не знаешь как используй первый вариант - он рабочий.
Помог бы и со вторым вариантом, но раз уж человек говорит с такой уверенностью(вместо благодарности или хотя бы вопроса "как?").
Черт, думал, что нажал спасибо. Понял, про что Вы. На зоне плюс поставил.
В интернете рылся достаточно долго, примеров работы с фреймами не нашел, поэтому и застопорился.