Страницы: 1
RSS
Вставка текста в браузер
 
Добрый день!

Прошу сильно не ругать за, возможно, простой вопрос :-)

Пишу небольшой скрипт на вставку данных из книги Эксель в формы в браузер. Опыт в этом есть, если производить вставку данных в браузер через свойство getElementsByID. Но в данном конкретном случае на сайте теги не имеют ID, у них есть только классы и, собственно, названия тегов.
Тут пришла мысль воспользоваться свойством getElementsByClassName и уже получив нужный класс веб-формы, добавлять в нее текст из книги Эксель.
Но тут возникли трудности - макрос никак не реагирует на свойство getElementsByClassName. Не выдает ни ошибки, ни какого-либо действия.
Подключил библиотеку Microsoft HTML Object Library, но не помогает, ничего не происходит.
Так же, знаю, что можно получить нужную веб-форму через свойство getElementByTagName  и номер тега в дереве, но нигде не нашел описания того, как вычислить номер нужного тега в дереве.

Помогите, пожалуйста, понять суть решения вопроса. Понемногу учусь VBA, знаю некоторые вещи, но в данном вопросе самому, видимо, не разобраться.
Спасибо!
 
Цитата
макрос никак не реагирует на свойство getElementsByClassName
не верю
где ваш код?

получили коллекцию элементов вызовом getElementsByClassName
в цикле перебрали элементы, нашли нужный, вставили значение
 
Цитата
footballplayer написал: макрос никак не реагирует на свойство getElementsByClassName. Не выдает ни ошибки, ни какого-либо действия
getElementsByClassName не поддерживается в IE 8-й версии и предыдущих, и ведет себя там аналогичным образом - выдает Empty. Проблема обычно решается перебором в All и заглядыванием в свойство ClassName.  Проверьте версию установленного IE.
Изменено: ZVI - 08.08.2017 21:13:57
 
Цитата
Игорь написал:
получили коллекцию элементов вызовом getElementsByClassName
в цикле перебрали элементы, нашли нужный, вставили значение

Спасибо за ответ!
На самом деле, пытался работать с getElementsByClassName так же, как и с getElementsByID, но теперь понимаю, что был неправ )
Файл с примером приложил. В файле пример на основе сайта yandex.ru. Там поле ввода запроса имеет class - input__control input__input. Подскажите, пожалуйста, на данном примере, как правильно вставить в данную форму текст. Поняв суть, думаю, уже смогу понемногу разобраться.


Цитата
ZVI написал:
getElementsByClassName не поддерживается в IE 8-й версии и предыдущих
Да, читая информацию по данному свойству видел, что необходим IE выше 8-го. Установил IE 11.
 
Если предполагается, что открыта главная страница Яндекса или страница предыдущего поиска Яндекса, то так выполняется поиск в любой версии IE:
Код
myInternetExplorer.Document.getElementById("text").Value = "PlanetaExcel"
With myInternetExplorer.Document.forms
  If .Item(0).className = "search suggest-form i-bem suggest-form_js_inited" Then
    Debug.Print "Search page"
    .Item(0).submit
  Else
    Debug.Print "Main page"
    .Item(1).submit
  End If
End With
Изменено: ZVI - 08.08.2017 21:13:09
 
ZVI
Получить форму по ID и вписать в нее текст у меня получается. Проблема возникает именно, когда пытаюсь получить доступ к форме для ввода текста через getElementsByClassName, либо через getElementsByName. Можете в качестве примера показать как сделать запрос на сайте yandex.ru через getElementsByClassName? Никак не могу вникнуть в суть) На просторах интернета есть примеры, но до меня не доходит (

На yandex.ru основная поисковая форма имеет класс "input__control" и имя тега "text"
Ни по getElementsByClassName, ни по getElementsByName схватиться за эту форму, чтобы вставить текст - не удается.

Спасибо!
 
В IE 11-й версии имя другое - не  "Windows Internet Explorer", а  "Internet Explorer", поэтому проверять окно нужно так:
If myInternetExplorer.Name Like "*Internet Explorer" Then
Если открыть новый и единственный IE и зайти на главную странице Яндекса, то такой код сработает:
Код
 Dim obj As Object
 Set obj = myInternetExplorer.Document.getElementsByClassName("input__control input__input")
 obj(obj.Length - 1).Value = "PlanetaExcel"

После перехода на динамическую страницу поиска элементы страницы уже другими будут и код потребуется другой.
Поиск проще делать через URL, например:  https://yandex.ru/search/?&text=PlanetaExcel
или https://yandex.ru/search/?&text=Планета+Excel
Изменено: ZVI - 09.08.2017 00:24:12
 
Цитата
ZVI написал:
IE 11-й версии имя другое - не  "Windows Internet Explorer", а  "Internet Explorer"
Спасибо за ответ!

Да, Вы правы, после того, как сделал поиск по Internet Explorer" скрипт начал работать. На yandex.ru по getElementsByClassName вставлять текст в форму поиска стало возможным.
Тут я уже думал, что теперь все получится на нужном сайте, но не тут-то было) На другом сайте, под который скрипт пишется, все так же не удается обратиться к веб-форме по getElementsByClassName. Удалось заметить одну особенность: если на сайте yandex.ru при просмотре HTML-кода через браузер можно видеть все строение сайт, то на сайте, под который пишется макрос, при просмотре HTML-кода видятся только несколько строк с файлами с расширением .js (как я понимаю, яваскриптом). И, насколько понимаю в этом вопросе, это означает, что сайт (все теги и классы) формируется динамически, посредствам яваскрипта? И означает ли это, что VBA не видит теги и классы сайта? Хотя отладчик браузера, запускаемый через F12, видит все теги и классы.

Спасибо!
 
Цитата
footballplayer написал:
На другом сайте, под который скрипт пишется, все так же не удается обратиться
Ну вот почему СРАЗУ нельзя было указать конкретный сайт? Ведь люди, помогая Вам, зря потратили СВОЁ время...
 
Извиняюсь за отсутствие конкретного примера. Дело в том, что сайт пока еще не доступен, только в разработке и показать его нет возможности.
На самом деле, думал, что по примеру yandex.ru смогу адаптировать скрипт под нужный сайт, только поэтому указал его в качестве примера.

Подскажите, пожалуйста, по Вашему ответу правильно ли я понял, что VBA не сможет работать с классами сайта, созданными при помощи яваскрипта?
Если это так, то существуют ли приемы обхода этой проблемы?

Спасибо!
 
footballplayer, по оформлению: кнопка цитирования не для ответа. Если хотите обратиться по имени - есть кнопка "Имя".
По вопросу: не владею информацией (
 
Юрий М,спасибо, по оформлению - понял)

Надеюсь, кто-нибудь подскажет по вопросу выше ) Просто, если VBA этого не умеет, начал бы искать другие варианты. А если все же VBA умеет, попробовал бы на нем, т.к. в VBA немножко разбираюсь и понемногу, думаю, смог бы составить скрипт.
Страницы: 1
Читают тему
Наверх