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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2016, 18:06   #1
bigorv
 
Регистрация: 14.10.2016
Сообщений: 3
По умолчанию кликнуть по строке web таблицы в браузере

из VBA работаю со страницей сайта. Нужно парсить данные со страницы в Word. Для вывода нужных данных нужно сначала мышкой кликнуть на определенную строку в таблице. Кликать по кнопке из VBA можно методом Click для кнопки. А вот как вызвать клик мыши по строке таблицы и какой элемент получать/искать.

Мне нужно "щелкнуть" мышкой программно из vba всегда на последней строке грида. Подскажите какой ID подставить в GetElementBiyID () и каким методом по нему "щелкнуть", а то у меня че то затык какой-то ((

Вот часть кода с таблицей (данные я заменил иксами - там конфеденциальные):
Код HTML:
<div id="form:datatable" class="ui-datatable ui-widget">
<div class="ui-datatable-tablewrapper">
<table role="grid">
<thead id="form:datatable_head">
<tr role="row">
<th id="form:datatable:j_idt100" class="ui-state-default" role="columnheader">
<span>&nbsp;</span>
</th>
<th id="form:datatable:j_idt123" class="ui-state-default ui-sortable-column" role="columnheader">
<span>ЕНП</span>
<span class="ui-sortable-column-icon ui-icon ui-icon-carat-2-n-s"></span>
</th>
<th id="form:datatable:j_idt126" class="ui-state-default ui-sortable-column" role="columnheader">
<span>Фамилия</span>
<span class="ui-sortable-column-icon ui-icon ui-icon-carat-2-n-s"></span>
</th>
<th id="form:datatable:j_idt129" class="ui-state-default ui-sortable-column" role="columnheader">
<span>Имя</span>
<span class="ui-sortable-column-icon ui-icon ui-icon-carat-2-n-s"></span>
</th>
<th id="form:datatable:j_idt132" class="ui-state-default ui-sortable-column" role="columnheader">
<span>Отчество</span>
<span class="ui-sortable-column-icon ui-icon ui-icon-carat-2-n-s"></span>
</th>
<th id="form:datatable:j_idt135" class="ui-state-default ui-sortable-column" role="columnheader">
<span>Дата<br>рождения</span>
<span class="ui-sortable-column-icon ui-icon ui-icon-carat-2-n-s"></span>
</th>
<th id="form:datatable:j_idt138" class="ui-state-default ui-sortable-column" role="columnheader">
<span>Документ</span>
<span class="ui-sortable-column-icon ui-icon ui-icon-carat-2-n-s"></span>
</th>
<th id="form:datatable:j_idt141" class="ui-state-default ui-sortable-column" role="columnheader">
<span>СМО</span>
<span class="ui-sortable-column-icon ui-icon ui-icon-carat-2-n-s"></span>
</th>
<th id="form:datatable:j_idt144" class="ui-state-default ui-sortable-column" role="columnheader">
<span>Дата<br>закрытия<br>записи</span>
<span class="ui-sortable-column-icon ui-icon ui-icon-carat-2-n-s"></span>
</th>
</tr>
</thead>
<tfoot></tfoot>
<tbody id="form:datatable_data" class="ui-datatable-data ui-widget-content">
<tr data-ri="0" data-rk="25702174" class="ui-widget-content ui-datatable-even jsfcrud_odd_row" role="row" aria-selected="false"><td role="gridcell">
<table class="term">

<tbody>
<tr>
<td><a href="#" title="История" onclick="mojarra.jsfcljs(document.getElementById('form'),{'form:datatable:0:j_idt105':'form:datatable:0:j_idt105'},'');return false" class="ui-icon ui-icon-clock">История</a></td>
<td></td>
</tr>
</tbody>
</table>
</td>

<td role="gridcell"><span class="remstat_purple" style="">X</span></td>
<td role="gridcell"><span class="remstat_purple">X</span></td>
<td role="gridcell"><span class="remstat_purple">X</span></td>
<td role="gridcell"><span class="remstat_purple">X</span></td>
<td role="gridcell"><span class="remstat_purple">X</span></td>
<td role="gridcell"><span class="remstat_purple" title="Паспорт гражданина СССР X">X</span></td>
<td role="gridcell"><span class="remstat_purple" title="X">X</span></td>
<td role="gridcell"><span class="remstat_purple">X</span></td>
</tr>

<tr data-ri="1" data-rk="56156596" class="ui-widget-content ui-datatable-odd jsfcrud_odd_row ui-state-highlight" role="row" aria-selected="true">
<td role="gridcell">
<table class="term">
<tbody>
<tr>
<td><a href="#" title="История" onclick="mojarra.jsfcljs(document.getElementById('form'),{'form:datatable:1:j_idt105':'form:datatable:1:j_idt105'},'');return false" class="ui-icon ui-icon-clock">История</a></td>
<td></td>
</tr>
</tbody>
</table>
</td>

<td role="gridcell"><span class="" style="">X</span></td>
<td role="gridcell"><span class="">X</span></td>
<td role="gridcell"><span class="">X</span></td>
<td role="gridcell"><span class="">X</span></td>
<td role="gridcell"><span class="">X</span></td>
<td role="gridcell"><span class="" title="Паспорт гражданина Российской Федерации X">X </span></td>
<td role="gridcell"><span class="" title="X">X</span></td>
<td role="gridcell"><span class=""></span></td>
</tr>
</tbody>
</table>
</div>
<div id="form:datatable_paginator_bottom" class="ui-paginator ui-paginator-bottom ui-widget-header ui-corner-bottom">
<span class="ui-paginator-first ui-state-default ui-corner-all ui-state-disabled">
<span class="ui-icon ui-icon-seek-first">p</span></span>
<span class="ui-paginator-prev ui-state-default ui-corner-all ui-state-disabled">
<span class="ui-icon ui-icon-seek-prev">p</span></span>
<span class="ui-paginator-current">1..2/2</span>
<span class="ui-paginator-next ui-state-default ui-corner-all ui-state-disabled">
<span class="ui-icon ui-icon-seek-next">p</span></span>
<span class="ui-paginator-last ui-state-default ui-corner-all ui-state-disabled">
<span class="ui-icon ui-icon-seek-end">p</span></span>
<span class="ui-paginator-pages">
<span class="ui-paginator-page ui-state-default ui-state-active ui-corner-all">1</span></span>
<select class="ui-paginator-rpp-options ui-widget ui-state-default ui-corner-left" value="10">
<option value="5">5</option>
<option value="10" selected="selected">10</option>
<option value="15">15</option>
</select>
</div>
<input type="hidden" id="form:datatable_selection" name="form:datatable_selection" autocomplete="off" value="56156596">
</div>
Разбил HTML код по строкам как смог, возможно не совсем корректно...

Последний раз редактировалось bigorv; 14.10.2016 в 18:27.
bigorv вне форума Ответить с цитированием
Старый 14.10.2016, 19:12   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Если у него нет id, то GetElementBiyID естественно не подходит. Используйте что-то другое. GetElementsByClassName, GetElementsByTagName, XPath (если WebBrowser умеет), JavaScript, ...
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 19.10.2016, 16:01   #3
bigorv
 
Регистрация: 14.10.2016
Сообщений: 3
По умолчанию

Это я понимаю. Просто мне нужно поконкретнее как написать код на VBA:
Допустим, я получаю элемент Tbody по его ID="formatatable_data" (см. выше HTML-код страницы) таким образом:
Код:
IEdoc.getElementById("form:datatable_data")
Дальше мне нужно видимо организовать цикл по его - Tbody - элементам <TR> чтобы добраться до нужной строчки таблицы (нужна последняя)- Как? Я написал так:
Код:
for each elemTR in IEdoc.getElementById("form:datatable_data")  'см.HTML код страницы выше
и получил в цикле нужный elemTR c TagName="TR" - это и есть исходная строка таблицы?

КАК "Щелкнуть" по нему мышкой программно?
elemTR.Click - не работает
elemTR.OnClick - не работает

В браузере при щелчке мышкой по строке таблицы происходит обновление информации на странице
bigorv вне форума Ответить с цитированием
Старый 19.10.2016, 16:35   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

getElementById вернет вам 1 элемент — tbody.

список tr наверно можно получить через Children

То есть примерно такой псевдокод
Код:
tbody = IEdoc.getElementById("form:datatable_data")
trs = tbody.Children;
trs[trs.Count - 1].Click()
Как это на VBA пишется не знаю.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 21.10.2016, 17:53   #5
bigorv
 
Регистрация: 14.10.2016
Сообщений: 3
По умолчанию

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

В отладчике VBA я когда я в окно Watches получаю объект IEdoc.getElementById("formatatabl e_data") и просматриваю иерархию его элементов - там туева хуча - есть и Children, есть и ChildNodes, есть FirstChild-LastChild, есть Rows. А есть еще All, внутри которого вложены все те же самые Children и проч. Каким путем мне добраться до элемента "Строка таблицы" и второй вопрос, как правильно выполнить "щелчок" мышью на этой строке.

Например у объекта Children Есть Item1 и Item2, то есть в гриде 2 строки. Объект Item имеет свойство TagName="TR", значит это и есть строка таблицы? Мне нужна последняя строка Item2, поэтому я пишу:
Код:
IEdoc.getElementById("form:datatable_data").children.item(2).Click
Получаю err.description "Object variable or With block variable not set"
bigorv вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присвоение значения строке на основе таблицы подстановки Cave_IAR Microsoft Office Access 4 09.11.2011 19:27
Замена значений в определённой строке таблицы oleg_sh Microsoft Office Excel 18 18.10.2010 12:02
Как сделать так, чтобы в моем браузере новое окно страницы открывалось в моем-же браузере??? Somilya Помощь студентам 6 22.12.2009 21:56
Отправка SMS через клик по строке таблицы RUBEY Microsoft Office Excel 4 25.12.2008 11:07
Программно установить курсор мыши в браузере IE, и кликнуть в окне браузера Vladimir K. Общие вопросы Delphi 13 19.01.2008 17:07