Модераторы: diadiavova, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как сделать клик на кнопку 
:(
    Опции темы
gangsterovich
Дата 25.10.2011, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 22.10.2011

Репутация: 1
Всего: 1



простой клик получается сделать


Код

For Each wabpageelement As HtmlElement In allelements
            If wabpageelement.GetAttribute("value") = " Войти " Then
                wabpageelement.InvokeMember("click")
            End If
        Next





вот так.тоесть когда у кнопки есть   value или  id  проблем не возникает


но когда дебаггер выдает только вот это 

Код

<A class=menutop onclick="this.blur(); jumptopath('/main.pl?edit='); return false;" 
href="#">Инвентарь</A>



как организовать клик?помогите плиз


M
diadiavova
Пожалуйста, оформляй код как следует. Кроме того, вопрос следует формулировать более четко


Это сообщение отредактировал(а) diadiavova - 25.10.2011, 18:18
PM MAIL   Вверх
gangsterovich
Дата 25.10.2011, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 22.10.2011

Репутация: 1
Всего: 1



мне вот сказали "инвентарь находится прямым перебором ссылок и нахождением в innerText(или innerHTML) слова "Инвентарь"   "

подскажите как это реализовать?
PM MAIL   Вверх
diadiavova
Дата 25.10.2011, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(gangsterovich @  25.10.2011,  18:16 Найти цитируемый пост)
мне вот сказали "инвентарь находится прямым перебором ссылок и нахождением в innerText(или innerHTML) слова "Инвентарь"   "

подскажите как это реализовать? 

У документа вызови метод GetElementsByTagName в качестве аргумента передай "A", таким образом получишь коллекцию ссылок. Дальше обойди коллекцию и найди такую ссылку, в которой свойство InnerHTML имеет нужное тебе значение. Код не привожу, поскольку он элементарен.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
gangsterovich
Дата 25.10.2011, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 22.10.2011

Репутация: 1
Всего: 1



на данном этапе для меня самое элементарное-очень сложное.часов по 12 в сутки учу vb.net  .сейчас уперся в вот это. если всм не сложно, напишите элементарный код.заранее спасибо

Код

For Each el As HtmlElement In WebBrowser1.Document.GetElementsByTagName("input")
  MsgBox(String.Format("type '{0}', name '{1}'", el.GetAttribute("type"), el.GetAttribute("name"))
Next



вот так?это  без перебора

по логике вот это тоже должно работать..хотя непашет почемуто..
Код

For Each el As HtmlElement In WebBrowser1.Document.Links
  MsgBox(el.GetAttribute("href"))
Next


Это сообщение отредактировал(а) gangsterovich - 26.10.2011, 00:30
PM MAIL   Вверх
diadiavova
Дата 25.10.2011, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142




 ! 
diadiavova
gangsterovich, Будь добр, не игнорируй замечания модератора, ведь совсем не сложно же выделить код и нажать вверху кнопку "Код".



gangsterovich, Честно говоря, не очень понятно, что именно ты хочешь найти в документе. В первом посте ты писал, что нужно кнопка, но в примере кода у тебя была не кнопка, а ссылка. Сейчас ты приводишь код, в котором ищешь элементы input и он(на сколько я понял) находит то что надо, далее пытаешься сделать то же самое со ссылками и это не работает. 
Document.Links будет находить ссылки, то есть элементы A, а не input. Естественно, учитывая, что в твоих примерах обходятся совершенно разные коллекции, стало быть и результат тоже будет разным. 
Если искать то, что у тебя в первом посте приведено, то код будет примерно следующим
Код

Dim links = WebBrowser1.Document.GetElementsByTagName("A")
For Each link As HtmlElement In links
    If link.InnerHtml = "Инвентарь" Then
        MsgBox("Инвентарь нашелся")
    End If 
Next




--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
gangsterovich
Дата 26.10.2011, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 22.10.2011

Репутация: 1
Всего: 1



странно. ничего не происходит.возможно что страница разбита на фрэймы.


дебагер показывает 

Код

<A class=menutop onclick="this.blur(); jumptopath('/main.pl?edit='); return false;" href="#">Инвентарь</A>



взял кусок из html кода,связанного с инвентарем

Код

<td align="left" valign="top" width="120" height="220"><div bgcolor="black" style="position:relative; z-index: 1; width:120px; height:220px">
<a href="/main.pl?edit=1&rand=0.4727732742478"><img src="http://img.combats.ru/i/chars/1/14.gif" onmouseout='ghideshow();'  onmouseover='gfastshow("мой логин (Перейти в \"Инвентарь\")");' width="120" height="220" border="0" oncontextmenu="top.returned(); event.returnValue=false;">
</a><div style="position:absolute; left:0px; top:0px; width:120px; height:220px; z-index:2"></div></div></td>



за некорректные вопросы уж извините,но надеюсь я вам вскоре на форуме тоже буду помогать..
PM MAIL   Вверх
diadiavova
Дата 26.10.2011, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



gangsterovich, так, а чего ты хочешь? Чтобы я угадал, разбита ли страница на фреймы? Я не могу тебе показать, как найти неизвестно что на странице с неизвестной мне структурой smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
gangsterovich
Дата 26.10.2011, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 22.10.2011

Репутация: 1
Всего: 1



упс.незнал.для фрейма 8 это будет выглядеть так?

Код

Dim links = WebBrowser1.Document.frames(8).GetElementsByTagName("A")
For Each link As HtmlElement In links
    If link.InnerHtml = "Инвентарь" Then
        MsgBox("Инвентарь нашелся")
    End If 
Next


или фрэйм как-то обьявлять надо?

Это сообщение отредактировал(а) gangsterovich - 26.10.2011, 00:50
PM MAIL   Вверх
diadiavova
Дата 26.10.2011, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(gangsterovich @  26.10.2011,  01:42 Найти цитируемый пост)
упс.незнал.для фрейма 8 это будет выглядеть так?

Не совсем. У класса HtmlDocument нет свойства Frames, поэтому его вызов приведет к ошибке. Все-таки тут надо понимать, что ты в данном случае имеешь дело с управляемыми оболочками, а не с типами из библиотеки mshtml непосредственно, а в оболочках реализовано далеко не все. Если ты хочешь в своем коде иметь доступ ко всем возможностям DOM, то тут надо либо подключать к проекту библиотеку mshtml и работать с ней(но там тоже есть нюансы, которые надо знать и понимать), либо можно воспользоваться поздним связыванием и работать так. Для второго варианта код тебе придется слегка изменить
Код

Dim links = WebBrowser1.Document.DomDocument.frames.item(8).getElementsByTagName("A")

Обрати внимание, что свойство frames вызывается не у самого документа(управляемой оболочки), а у неуправляемого объекта, вызываемого через свойство DomDocument. К сожалению обойти эту коллекцию с помощью конструкции For Each не получится, поскольку при использовании позднего связывания всегда возвращается тип Object, но обычный цикл со счетчиком вполне должен сработать.
 Так же обрати внимание, что коллекцию я индексирую не напрямую, а через метод item, это тоже связано с тем, что Object может и не проиндексироваться (честно говоря точно не помню, сработает это или нет, но вызов метода сработать должен точно).
 То есть дальше будет что-то типа
Код

For i = 0  To links.length
    If links.item(i).innerHTML = "Инвентарь" Then
        MsgBox("Инвентарь нашелся")
    End If
Next



Это сообщение отредактировал(а) diadiavova - 26.10.2011, 01:12


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Lols
Дата 26.10.2011, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 21.10.2011

Репутация: нет
Всего: нет



Я начинаю путаться, если честно. Так каким образом сделали клик? Или все же остановились на ссылке? smile
PM MAIL   Вверх
gangsterovich
Дата 26.10.2011, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 22.10.2011

Репутация: 1
Всего: 1



Lols, пока топчусь на месте.клик по кнопке сделать нетяжело.тк у кнопки есть id и value.а вот найти нужную ссылку и кликнуть по ней,тут надо поднапрячься...

Код

Dim links = WebBrowser1.Document.DomDocument.frames.item(8).getElementsByTagName("A")
        For i = 0 To links.length
            If links.item(i).innerHTML = "Инвентарь" Then
                MsgBox("Инвентарь нашелся")
            End If
        Next


этот код вызывает остановку  отладки после запуска этого кода


а как вообще узнать кол-во фреймов на странице и что в них содержится?
обычным дебаггером?


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

Код

Dim hrefs As String
 Dim href As Object
 I = 0
 For Each href In brwWebBrowser.Document.frames(8).Document.links
 hrefs = hrefs + href.href + " " + href.innertext + vbNewLine
 If I Mod 1 = 0 And I <> 0 Then
      MsgBox hrefs
 hrefs = ""
 End If
 I = I + 1
 Next


Это сообщение отредактировал(а) gangsterovich - 26.10.2011, 02:16
PM MAIL   Вверх
diadiavova
Дата 26.10.2011, 06:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(gangsterovich @  26.10.2011,  02:57 Найти цитируемый пост)
этот код вызывает остановку  отладки после запуска этого кода

Ну вообще-то этот код и не должен был работать, я тут только показал, на что надо обратить внимание и как исправить твой код. Остановиться он может из-за чего угодно, например для его работы надо чтобы в документе было как минимум девять фреймов, что маловероятно, если мы говорим о реальной вебстранице. Кроме того, в коде ниже правильно написано, что сначала у фрейма надо вызвать свойство document, ну это уже нюансы DOM.
Цитата(gangsterovich @  26.10.2011,  02:57 Найти цитируемый пост)
а как вообще узнать кол-во фреймов на странице и что в них содержится?

Ну если ты получишь коллекцию фреймов, то у нее есть свойство length ( это если речь о неуправляемой коллекции).
Цитата(gangsterovich @  26.10.2011,  02:57 Найти цитируемый пост)
вроде как рабочий код ,но я в нем не разобрался,неудалось и его запустить.

Был бы он рабочим, отчего бы его не удалось запустить? Вот это brwWebBrowser.Document.frames(8) никак не может быть рабочим, поскольку у документа нет свойства frames
http://msdn.microsoft.com/ru-ru/library/sy...properties.aspx
другой вопрос, если здесь использовался не стандартный веб-браузер, а ком-компонент, то там это было бы возможно. Посмотри внимательнее там, откуда ты взял этот код.

И кстати вводить счетчик в форич - изврат.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
gangsterovich
Дата 26.10.2011, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 22.10.2011

Репутация: 1
Всего: 1



скажите,а как вот это расшифровать?


Принцип такой: 
 WebBrowser1.Document - это объект, который имеет такую же объектную модель, как и DOM (это он собственно говоря и есть). 
 То есть, если мы выполним: Код:
Код

WebBrowser1.DocumentGetElementByID("menu4")



 то получим объект, то же документ, но это будет лишь часть документа, которая заключена в <SPAN id=menu4>...<\SPAN> 
 далее: Код:
Код

document.getElementsByTagname("a")



 получим массив, со всеми ссылками, нам же нужна первая, на которой надо выполнить метод клик. В итоге получим строку типа: Код:

Код

 WebBrowser1.Document.WebBrowser1.DocumentGetElementByID("menu4").getElementsByTagname("a")(0).click()

PM MAIL   Вверх
diadiavova
Дата 26.10.2011, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(gangsterovich @  26.10.2011,  20:49 Найти цитируемый пост)
WebBrowser1.DocumentGetElementByID

Здесь точка пропущена 
Код

WebBrowser1.Document.GetElementById

Цитата(gangsterovich @  26.10.2011,  20:49 Найти цитируемый пост)
WebBrowser1.Document.WebBrowser1.DocumentGetElementByID


Цитата(gangsterovich @  26.10.2011,  20:49 Найти цитируемый пост)
WebBrowser1.Document.WebBrowser1.DocumentGetElementByID

Зачем от документа снова возвращаться к браузеру? WebBrowser1.Document.GetElementByID вполне достаточно.
А вообще последнего вопроса я не понял. Точнее не понял в чем вопрос.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
gangsterovich
Дата 26.10.2011, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 22.10.2011

Репутация: 1
Всего: 1



"И кстати обрабатывать страницу не так уже и сложно, если загружать в переменную не хтмл код страницы а только текст который виден, тогда проще маску сделать и уже вытащить все параметры которые нужны"

кстати.обьясните пожалуйста,что такое "маска"
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0736 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.