Задача - актуализировать товар на сайте. Для этого есть прайс лист поставщиков (exel) и админка (Web). Уже сделано: Сравнивает прайс лист магазина и то, что на сайте в наличии или отсутствует. Умеет менять 100500+ параметров внутри каждого товара (снимает, ставит галочки, меняет содержание ячейки цена, старая цена, новая цена, изменяет значение выпадающего меню).
В основном работаю с функцией: getElementsByName("Имя изменяющегося поля" ;) .Item(0).Value = ....
ЧТО НАДО и В ЧЕМ ТРУДНОСТЬ: Открываем Експлорер на главной странице админки интернет-магазина. Она представляет собой следующий вид: УправляющаяФигня ТОВАР_1 различная_управляющая_аброкадабра УправляющаяФигня ТОВАР_2 различная_управляющая_аброкадабра ...
Таких строчек более 1000. Надо, чтоб макрос находил ссылку на нужный товар и кликал по нему. Например, нужно изменить карточку ТОВАР_2. Ссылка записана как тег: ТОВАР_2 (открываем галку a class="cat_ttl" href="javascript:"> ТОВАР_2 </a закрываем галку)
Т.Е. поля Name, с которым у меня получалось отлично работать, отсутствует, а поле Class макрос как-то очень криво ищет, точнее не ищет, и я не могу добиться того, чтоб VBA понимал куда ему надо кликать.... При чем поле Class="cat_ttl" у ВСЕХ товаров одинаково и надо искать так же само название товара (ТОВАР_2) внутри тега и кликать по нему
На другом форуме узнал о поддержке в 8 версии Експлорера поддерживается функция getElementsByClassName . Был предложен для реаз\лизации код: [vba]
Код
my_coll= IE.Document.getElementsByClassName("cat_ttl") for i = 0 to my_coll.length -1 if my_coll(i).innertext = "Товар_2" then my_coll(i).click : exit for next i
[/vba] Но он находит только один элемент с классом cat_ttl (самый первый), а условие my_coll(i).innertext = "Товар_2" отрабатывает всегда TRUE и уходит из цикла с i=1 и не куда не кликает...
P.S. Может быть есть функция, которая просто искала бы текст на сайте, а потом кликала по нему... Что-то вроде FindText("Товар_2" ;) .Click ??
Задача - актуализировать товар на сайте. Для этого есть прайс лист поставщиков (exel) и админка (Web). Уже сделано: Сравнивает прайс лист магазина и то, что на сайте в наличии или отсутствует. Умеет менять 100500+ параметров внутри каждого товара (снимает, ставит галочки, меняет содержание ячейки цена, старая цена, новая цена, изменяет значение выпадающего меню).
В основном работаю с функцией: getElementsByName("Имя изменяющегося поля" ;) .Item(0).Value = ....
ЧТО НАДО и В ЧЕМ ТРУДНОСТЬ: Открываем Експлорер на главной странице админки интернет-магазина. Она представляет собой следующий вид: УправляющаяФигня ТОВАР_1 различная_управляющая_аброкадабра УправляющаяФигня ТОВАР_2 различная_управляющая_аброкадабра ...
Таких строчек более 1000. Надо, чтоб макрос находил ссылку на нужный товар и кликал по нему. Например, нужно изменить карточку ТОВАР_2. Ссылка записана как тег: ТОВАР_2 (открываем галку a class="cat_ttl" href="javascript:"> ТОВАР_2 </a закрываем галку)
Т.Е. поля Name, с которым у меня получалось отлично работать, отсутствует, а поле Class макрос как-то очень криво ищет, точнее не ищет, и я не могу добиться того, чтоб VBA понимал куда ему надо кликать.... При чем поле Class="cat_ttl" у ВСЕХ товаров одинаково и надо искать так же само название товара (ТОВАР_2) внутри тега и кликать по нему
На другом форуме узнал о поддержке в 8 версии Експлорера поддерживается функция getElementsByClassName . Был предложен для реаз\лизации код: [vba]
Код
my_coll= IE.Document.getElementsByClassName("cat_ttl") for i = 0 to my_coll.length -1 if my_coll(i).innertext = "Товар_2" then my_coll(i).click : exit for next i
[/vba] Но он находит только один элемент с классом cat_ttl (самый первый), а условие my_coll(i).innertext = "Товар_2" отрабатывает всегда TRUE и уходит из цикла с i=1 и не куда не кликает...
P.S. Может быть есть функция, которая просто искала бы текст на сайте, а потом кликала по нему... Что-то вроде FindText("Товар_2" ;) .Click ??fanar6
fanar6, в html-содержимом страницы должна быть ссылка. Эту ссылку нужно подставить сюда: [vba]
Код
myIE.Navigate myHypelink.href
[/vba] где myIE - это Internet Explorer; myHypelink - гиперссылка.
И кликать не нужно. К тому же кликание не приводит к изменению "IE.Document". Т.е. IE.Document будет представлять страницу, куда Вы ранее перешли с помощью "Navigate".
Если выложите на Форуме ссылку на сайт, на котором нужно найти ссылку, то получится написать более точно.
fanar6, в html-содержимом страницы должна быть ссылка. Эту ссылку нужно подставить сюда: [vba]
Код
myIE.Navigate myHypelink.href
[/vba] где myIE - это Internet Explorer; myHypelink - гиперссылка.
И кликать не нужно. К тому же кликание не приводит к изменению "IE.Document". Т.е. IE.Document будет представлять страницу, куда Вы ранее перешли с помощью "Navigate".
Если выложите на Форуме ссылку на сайт, на котором нужно найти ссылку, то получится написать более точно.Скрипт
Спасибо большое! Именно так в конечном итоге и сделал... Однако, изначально цель была, не извлекая id-номер продукции из базы данных, искать ее в списке по имени.... Но в итоге по имени найти не удалось (точнее удалось, но перейти по ссылке не удалось), пришлось извлекать id, связывать с именем и уже потом переходить по ссылке по вашему алгоритму...
Итак проблема решена, всем спасибо за помощь!!! Если кому помощь нужна по работе с IE обращайтесь.... Я уже столько узнал про него :)))
Спасибо большое! Именно так в конечном итоге и сделал... Однако, изначально цель была, не извлекая id-номер продукции из базы данных, искать ее в списке по имени.... Но в итоге по имени найти не удалось (точнее удалось, но перейти по ссылке не удалось), пришлось извлекать id, связывать с именем и уже потом переходить по ссылке по вашему алгоритму...
Итак проблема решена, всем спасибо за помощь!!! Если кому помощь нужна по работе с IE обращайтесь.... Я уже столько узнал про него :)))fanar6
Сообщение отредактировал fanar6 - Четверг, 24.10.2013, 17:48