Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229

Работа с web страницей

06.02.2013, 19:27. Показов 5068. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем дня!
Никогда не работал с интернетом, но возникла необходимость.
Бросил на форму WebBrowser1.
Указал путь, страница открылась.
Теперь надо именно сделать то, что надо. А надо:
Найти программно на странице ярлыки и выбрать значения из полей.
Почему я их называю ярлыками? по тому что когда над ними находится курсор меняется сам курсор(становится в виде указательного пальца). А если кликнуть ПКМ, то в меню есть пункт "Копировать ярлык"
Так вот если скопипастить в блокнот, то у всех нужных мне ярлыков указан один и тот же путь.
Вот поэтому вопрос: как выбрать в WB.Document все значения полей, у которых установлена ссылка.
Находил в интернете типа отобразить

Visual Basic
1
Текст1 = WB.Document.documentelement.innerhtml
Но в отображенном тексте текста ссылки как у ярлыка нет
сделал по другому:

Visual Basic
1
2
Dim Q
Set Q = WB.Document
Там целую кучу свойств можно просмотреть, но где найти ссылки(ярлыки) не пойму
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.02.2013, 19:27
Ответы с готовыми решениями:

Работа с Web - страницей
Здравствуйте! Подскажите пожалуйста, каким образом (если такой существует) можно работать с вэб страницами на java? Имеется ввиду,...

Взаимодействие с web страницей
Всем доброго времени суток, решил разобраться с взаимодействием с web страницей в окне приложения delphi, ранее использовал WebBrowser, был...

Управление Web-страницей в TCppWebBrower
Где можно почитать по подробней про TComInterface и т.п. для Builder c++ 2010. Дайте пожалуйста ссылочку Добавлено через 13 минут ...

14
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
06.02.2013, 19:53
Цитата Сообщение от Alex77755 Посмотреть сообщение
Бросил на форму WebBrowser1
Зачем? Если нужен список ссылок на страничке, то надо скачать страничку в память и распарсить.
Примеры есть в готовых решениях - сети
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
06.02.2013, 20:54  [ТС]
Я пока не разбираюсь в деталях, но по поиску нашёл
Visual Basic
1
Текст1 = WB.Document.documentelement.innerhtml
О чём писал выше. И там нет нужной мне ссылки.

И к тому же по ссылке на сайт отрывается стартовая страница, и только с неё можно перейти на нужную страницу.
При этом адрес в адресной строке не меняется. И если перейти по адресу в адресной строке, то открывается только стартовая страница.

Добавлено через 5 минут
если нажать ПКМ и выбрать исходный код, то там вообще мало чего и пока всё непонятно
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html><head><title>BetCity - букмекерская компания</title>
<meta name="keywords" content="betcity,бетсити,букмекерская,букмекер,бк,букмекерская компания,букмекерская контора,ставки,спорт,результаты,live результаты,live ставки,чемпионат,футбол,теннис,хоккей,on-line,sports,soccer,hockey,basketball,tennis">
<meta name="page-topic" content="sports">
    <script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-120364-1");
pageTracker._trackPageview();
} catch(err) {}</script>
    </head>
<frameset rows="112,*,38" border="0">
<frame name="btop" src="top.php" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" noresize>
<frame name="center" src="center.php" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" noresize>
<frame name="bottom" src="bottom.php" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" noresize>
</frameset></html>
Добавлено через 1 минуту
Но нужных мне ссылок явно нет

Добавлено через 33 минуты
Нашёл что-то подходящее во фрейме.
По крайней мере там есть нужные мне цифры и назначение, как я понял процедуры
HTML5
1
<b>Дополнительные форы:</b> <b>Йемен</b>: (+1.5) <a href="#" onClick="return al();">1.51</a>; <b>Бахрейн</b>: (-1.5) <a href="#" onClick="return al();">2.4</a>;</div><div id="dt2" >
onClick="return al - это назначение ссылки?

А вся строка в документе:

Дополнительные форы: Йемен: (+1.5) 1.51; Бахрейн: (-1.5) 2.4;

Ну как привязаны нужные мне цифры (1.51 и 2.4) думаю смогу распарсить. А вот как выдрать код из фрейма?
0
Заблокирован
06.02.2013, 21:08
Alex77755, Мне помогали писать 1 проект. Но там как я понял использован код сделанный на заказ, написан уникально, не могу сюда выложить. Там в общем вводим данные в поле, жмем найти полученные данные копируем в текстовое поле. Если подходит под твои нужды пиши: dan-taraz@mail.ru я тебе его дам, но при условии, что дальше не пойдет.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
07.02.2013, 09:58  [ТС]
Ну что ? Никто свежих идей не подкинет?
Выяснил такую петрушку:
Если открыть ссылку в ИЕ, то просмотр кода показывает весь код.
А если ту же страницу открыть в Опере, то нужная мне часть кода находится во фрейме и что бы просмотреть её код нужно ПКМ-фрейм-открыть в новой вкладке. И тогда
Visual Basic
1
TB = WB2.Document.documentelement.innerHTML
могу просмотреть код. При этом у страницы другой адрес.(который будучи вставленным в ИЕ открывается)
Всё, вроде бы, нечего кроме одного НО. программно я могу перейти только на первую страницу
Visual Basic
1
WB2.Navigate "http://betcityru.com/livebetssh.php?refr=1"
При попытке перейти на вторую страницу(адрес скопировал из адресной строки.)
Вылетает ошибка.
Visual Basic
1
'WB2.Navigate "http://betcityru.com/bets/bets2.php?line_id=6165"
Если вставляю в адресную строку Оперы - открывается
И что интересно: в программе я использую WebBrowser от микрософт. И в чистом виде ИЕ отображает так как меня устроило бы. Без фреймов. Как в WebBrowser получить код всей страницы включая фреймы?
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
07.02.2013, 10:05  [ТС]
Вот кстати скрины ошибки. Предлагает отладку
Миниатюры
Работа с web страницей   Работа с web страницей  
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
07.02.2013, 11:07
Alex77755, дай проект. Найду время - постараюсь помочь.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
07.02.2013, 13:42  [ТС]
Dragokas, попробуй
И ещё ньюанс: "ПКМ-просмотр HTML кода" отображает нужый код в блокноте.
Может можно как-то отловить и перехватить содержание и затянуть в переменную?
А как отловить событие клика ПКМ по сонтролу?
У него такого нет. Или послать SendKeys и искать окно блонота, что бы считать код?...
Вложения
Тип файла: rar WEB.rar (189.3 Кб, 30 просмотров)
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
09.02.2013, 12:27  [ТС]
И ни у кого никаких идей?
Тогда другой вариант:
На странице таблица с ссылками(ярлыкми)
Выделяю часть таблицы. Вставляю в блокнот - только значения.
Вставляю в Ексел - часть ссылок сохраняется и вставляется именно как ссылка, а часть вставляестся только выделенная цветом, но сссылки нет. В любом случае в буфере не только значения.
Массив строк значений получаю так:
Visual Basic
1
2
3
4
5
6
s = Clipboard.GetText
s = Replace(s, ";", " ")
Do While InStr(s, "  ") > 0
s = Replace(s, "  ", " ")
Loop
M() = Split(s, vbNewLine)
Отсюда вопрос: как из буфера вытащить в переменную все значения?
там же повидимому XML таблица?
0
Заблокирован
09.02.2013, 12:44
Alex77755, Наверно понять не могут чего ты хочешь )))) Я тоже не могу понять...
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
09.02.2013, 12:48  [ТС]
Отсюда вопрос: как из буфера вытащить в переменную все значения?
Которые попали туда при копировании таблицы на WEB странице
Выделяю часть таблицы. Вставляю в блокнот - только значения.
Вставляю в Ексел - часть ссылок сохраняется и вставляется именно как ссылка, а часть вставляестся только выделенная цветом, но сссылки нет. В любом случае в буфере не только значения.
Добавлено через 2 минуты
Наверное, что-то типа:
Code
1
2
//Извлекаем данные из буфера обмена, преобразовывая их в формат XML
                       using (MemoryStream ms = (MemoryStream)Clipboard.GetData("XML Spreadsheet"))
Но это для NET какого-то
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
09.02.2013, 13:06  [ТС]
Если непонятен вопрос - скрины: страница, ексел, блокнот.
В екселе есть ссылки как и на странице. Как вытащить в переменную ссылки из буфера, чтобы распарсить?
Как получить код всего фрейма разобрался. Теперь надо получить код выделенной зоны
Миниатюры
Работа с web страницей   Работа с web страницей   Работа с web страницей  

Работа с web страницей  
0
Заблокирован
09.02.2013, 13:19
Давно писал программу для поиска ключей к антивирусу NOD32 на разных страницах популярных сайтов. Качал полностью страницу, потом искал в ней значения между тегами, пригодится, если да пиши скину исходник. Личные данные удалены.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
09.02.2013, 21:55
Цитата Сообщение от Alex77755 Посмотреть сообщение
XML таблица?
нет, XML - это немного не то.
Вот пример: http://www.w3schools.com/xml/note.xml
Такое парсится через объект Microsoft.XMLDOM
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
12.02.2013, 22:54  [ТС]
Похоже нашел, что искал. Буду разбираться:
В этой статье показано, как добавлять и извлекать данные HTML в буфер обмена Microsoft Windows с помощью Visual Basic.
Дополнительная информация
Разработчики могут использовать совместно с другими приложениями, которые поддерживают HTML, Microsoft Office и Microsoft Internet Explorer

данных HTML формат буфера обмена CF_HTML (формат HTML).

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

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

использовать PutHTMLClipboard процедуры, описанной далее в этой статье.
Действия, чтобы создать пример проекта
Начать новый проект EXE в Visual Basic. По умолчанию будет создана форма Form1.
Добавьте в форму Form1 два элемента управления CommandButton . Измените свойство Caption Command1 для Размещения HTMLи изменить свойство

заголовка для команда2 для Получения HTML.
В меню проект выберите команду Добавить модуль для добавления в проект стандартный модуль BAS.
Добавьте следующий код в окно модуля:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
Option Explicit
 
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) _
   As Long
Private Declare Function GlobalAlloc Lib "kernel32" ( _
 
   ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function SetClipboardData Lib "user32" ( _
   ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function RegisterClipboardFormat Lib "user32" Alias _
   "RegisterClipboardFormatA" (ByVal lpString As String) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) _
   As Long
Private Declare Function GlobalUnlock Lib "kernel32" ( _
   ByVal hMem As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
   pDest As Any, pSource As Any, ByVal cbLength As Long)
Private Declare Function GetClipboardData Lib "user32" ( _
   ByVal wFormat As Long) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" ( _
   ByVal lpData As Long) As Long
 
Private Const m_sDescription = _
                  "Version:1.0" & vbCrLf & _
                  "StartHTML:aaaaaaaaaa" & vbCrLf & _
                  "EndHTML:bbbbbbbbbb" & vbCrLf & _
                  "StartFragment:cccccccccc" & vbCrLf & _
                  "EndFragment:dddddddddd" & vbCrLf
                  
Private m_cfHTMLClipFormat As Long
 
Function RegisterCF() As Long
 
 
   'Register the HTML clipboard format
   If (m_cfHTMLClipFormat = 0) Then
      m_cfHTMLClipFormat = RegisterClipboardFormat("HTML Format")
   End If
   RegisterCF = m_cfHTMLClipFormat
   
End Function
 
Public Sub PutHTMLClipboard(sHtmlFragment As String, _
   Optional sContextStart As String = "<HTML><BODY>", _
   Optional sContextEnd As String = "</BODY></HTML>")
   
   Dim sData As String
   
   If RegisterCF = 0 Then Exit Sub
   
   'Add the starting and ending tags for the HTML fragment
   sContextStart = sContextStart & "<!--StartFragment -->"
   sContextEnd = "<!--EndFragment -->" & sContextEnd
   
   'Build the HTML given the description, the fragment and the context.
   'And, replace the offset place holders in the description with values
   'for the offsets of StartHMTL, EndHTML, StartFragment and EndFragment.
   sData = m_sDescription & sContextStart & sHtmlFragment & sContextEnd
   sData = Replace(sData, "aaaaaaaaaa", _
                   Format(Len(m_sDescription), "0000000000"))
   sData = Replace(sData, "bbbbbbbbbb", Format(Len(sData), "0000000000"))
   sData = Replace(sData, "cccccccccc", Format(Len(m_sDescription & _
                   sContextStart), "0000000000"))
   sData = Replace(sData, "dddddddddd", Format(Len(m_sDescription & _
                   sContextStart & sHtmlFragment), "0000000000"))
 
   'Add the HTML code to the clipboard
   If CBool(OpenClipboard(0)) Then
   
      Dim hMemHandle As Long, lpData As Long
      
      hMemHandle = GlobalAlloc(0, Len(sData) + 10)
      
      If CBool(hMemHandle) Then
               
         lpData = GlobalLock(hMemHandle)
         If lpData <> 0 Then
            
            CopyMemory ByVal lpData, ByVal sData, Len(sData)
            GlobalUnlock hMemHandle
            EmptyClipboard
            SetClipboardData m_cfHTMLClipFormat, hMemHandle
                        
         End If
      
      End If
   
      Call CloseClipboard
   End If
 
End Sub
 
Public Function GetHTMLClipboard() As String
 
   Dim sData As String
   
   If RegisterCF = 0 Then Exit Function
   
   If CBool(OpenClipboard(0)) Then
   
      Dim hMemHandle As Long, lpData As Long
      Dim nClipSize As Long
      
      GlobalUnlock hMemHandle
 
      'Retrieve the data from the clipboard
      hMemHandle = GetClipboardData(m_cfHTMLClipFormat)
      
      If CBool(hMemHandle) Then
               
         lpData = GlobalLock(hMemHandle)
         If lpData <> 0 Then
            nClipSize = lstrlen(lpData)
            sData = String(nClipSize + 10, 0)
            
 
            Call CopyMemory(ByVal sData, ByVal lpData, nClipSize)
            
            Dim nStartFrag As Long, nEndFrag As Long
            Dim nIndx As Long
            
            'If StartFragment appears in the data's description,
            'then retrieve the offset specified in the description
            'for the start of the fragment. Likewise, if EndFragment
            'appears in the description, then retrieve the
            'corresponding offset.
            nIndx = InStr(sData, "StartFragment:")
            If nIndx Then
               nStartFrag = CLng(Mid(sData, _
                                 nIndx + Len("StartFragment:"), 10))
 
            End If
            nIndx = InStr(sData, "EndFragment:")
            If nIndx Then
               nEndFrag = CLng(Mid(sData, nIndx + Len("EndFragment:"), 10))
            End If
            
            'Return the fragment given the starting and ending
            'offsets
            If (nStartFrag > 0 And nEndFrag > 0) Then
               GetHTMLClipboard = Mid(sData, nStartFrag + 1, _
                                 (nEndFrag - nStartFrag))
            End If
                        
         End If
      
      End If
 
   
      Call CloseClipboard
   End If
 
 
End Function
Добавьте следующий код в окно кода для формы Form1:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Command1_Click()
    Dim sFrag As String, sStart As String, sEnd As String
    sStart = "<HTML><BODY><FONT FACE=Arial SIZE=1 COLOR=BLUE>"
    sFrag = "<B>This is bold</B> and <I>this is italic.</I>"
    sEnd = "</FONT></BODY></HTML>"
    PutHTMLClipboard sFrag, sStart, sEnd
End Sub
 
Private Sub Command2_Click()
    MsgBox GetHTMLClipboard
End Sub
Нажмите клавишу F5, чтобы запустить программу Visual Basic. Нажмите кнопку Поместить HTML для добавления данных HTML в буфер обмена. Нажмите

кнопку Получить HTML , чтобы извлечь данные из буфера обмена. Обратите внимание, что окно сообщения отображается фрагмент HTML.
Запустите Microsoft Word (или любого приложения, которое распознает формат HTML для буфера обмена). Вставка содержимого буфера обмена в новый

документ для изучения результатов кода HTML, содержащиеся в буфере.
Дополнительные примечания
С помощью подхода, который отправляет код HTML в буфер обмена может быть особенно полезным для клиентов автоматизации Office. Например при

наличии клиента автоматизации, которые необходимы для создания форматированных данных для ячеек в Microsoft Excel или абзацев в Microsoft Word

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

out-of-process для клиента модели автоматизации.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.02.2013, 22:54
Помогаю со студенческими работами здесь

Управление Web-страницей из C++ Builder
Доброго всем времени суток !!! Если кто-то знает, подскажите, пожалуйста, потому, что ковыряюсь уже не одни сутки и не могу найти...

Как сделать форму с web-страницей?
Подскажите как сделать форму с web-страницей в delphi 7

Операции с Web-страницей: Заполнение полей
Вообщем сабж. Самое легкое что надо,это копировать содержимое страницы,в указанном месте. А второе,отследить например на сайте vk.com ,...

Как сделать курсор-песочные часики над страницей WEB?
Как сделать курсор нестандартного вида над документом WEB на время между нажатием клавиши submit и до перерисовки страницы с сервера?

Связь между страницей в PHP и страницей с ее стилем
В учебном блоге приходится кое-что менять в стилях. И изменения в файле CSS не выполняются. пришлось в head вставить кусок со стилями....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru