Страницы: 1
RSS
Работа макросом с IE: не вставляются значения
 
Здравствуйте, гуру и другие форумчане!
Научился работать макросом с Эксплорером. Но возникла проблема: не могу вставить значение, т.к. по известным мне приемам этого не получается.
Помогите разобраться.
Открываю страничку:
Код
1
2
3
4
5
6
7
8
   Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True 'False '
Вкладка = Url
IE.Navigate (Вкладка)
    Do Until IE.ReadyState = 4 'Конструкция цикла этого ждет, пока полностью не откроется страница в браузере
        DoEvents
    Loop
aaa = IE.Document.getElementsByTagName("TEXTAREA").Value
И вот значение aaa получается пустое. И никак не могу понять почему.
Я точно знаю, что TagName этого элемента = TEXTAREA, т.к. проверял так:
 
Код
1
2
3
4
5
6
7
   For i = 331 To IE.Document.all.Length - 1
        у34 = IE.Document.all.Item(i).innerText
        у35 = IE.Document.all.Item(i).Value
        у36 = IE.Document.all.Item(i).tagName
        If Trim(у34) = "" Then GoTo 22
        MsgBox IE.Document.all.Item(i).innerText, vbInformation, "Элемент № " & i
22     Next i
Даже в этом цикле сделал так:
Код
1
IE.Document.all.Item(i).innerText = 112
И значение вставляется нормально. А вот
Код
1
aaa = IE.Document.getElementsByTagName("TEXTAREA").Value
все равно выдает пустое значение.
И
Код
1
aaa = IE.Document.getElementsByTagName("TEXTAREA").innerText
Тоже выдает "".
Подскажите, где ошибка, почему значение ааа выдает пустое значение?
 
Забыл добавить. Вот так на странице выглядит текст:
Текст<tr><td align=right>Адрес и назначение: </td><td><textarea id="place" cols=105 name="place">ЗДЕСЬ ТЕКСТ</textarea></td></tr>
</td></tr></table>
 
Цитата
Мультипликатор написал:
Я точно знаю, что TagName этого элемента = TEXTAREA
Я точно знаю,что Id у этого элемента =place
getElementsByTagName-это коллекция элементов
Код
1
aaa = IE.Document.getElementById("place").innerText
 
Тоже самое - значение ааа пустое.
Для поиска сделал вот так:  
Код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  For i = 332 To IE.Document.all.Length - 1
        у33 = IE.Document.all.Item(i).Name
        у34 = IE.Document.all.Item(i).innerText
        у35 = IE.Document.all.Item(i).Value
        у36 = IE.Document.all.Item(i).tagName
        у37 = IE.Document.all.Item(i).ID
        у38 = IE.Document.all.Item(i).className
         
        aaa = IE.Document.getElementsByID("place").Value
        aaa = IE.Document.getElementsByID("place").innerText
        aaa = IE.Document.getElementsByTagName(у36).Value
        aaa = IE.Document.getElementsByTagName(у37).innerText
        aaa = IE.Document.getElementsByTagName(у36).Value
        aaa = IE.Document.getElementsByTagName(у36).innerText
 
        If у33 = "place" Then
            MsgBox "Name=" & у33 & "!" & Chr(10) & _
                    "Value=" & у35 & "!" & Chr(10) & _
                    "className=" & у38 & "!" & Chr(10) & _
                    "tagName=" & у36 & "!" & Chr(10) & _
                    "ID=" & у37 & "!"
                    IE.Document.all.Item(i).innerText = 112
 
        End If
И когда попадает на нужное место (т.е. вставляется значение 112) получается:
      у33 = IE.Document.all.Item(i).Name = "place"
      у34 = IE.Document.all.Item(i).innerText = Значение, которое было в этом месте
       у35 = IE.Document.all.Item(i).Value= Значение, которое было в этом месте
       у36 = IE.Document.all.Item(i).tagName = "TEXTAREA"
       у37 = IE.Document.all.Item(i).ID= "place"
       у38 = IE.Document.all.Item(i).className = ""
       
 
Ну получается, что напрямую я не получу свой (даже не знаю как это называется) элемент.
Только перебором и с условием, что
Код
1
2
3
IE.Document.all.Item(i).Name = "place"
и
IE.Document.all.Item(i).tagName = "TEXTAREA"
Тогда уже вводить значение:
Код
1
IE.Document.all.Item(i).innerText = "Мой текст"
По другому не получается.
 
Но на странице находится около 400 элементов (IE.Document.all.Length - 1).
Перебирать их все.... Как-то не очень... Когда мой элемент под номером 335.
Но я так понимаю, что количество элементов может изменяться и привязываться к номеру элемента не правильно, т.к. может в последствии выдать ошибку.
Всё таки может есть способ получить значение напрямую и сразу вставить "Мое значение"?
 
Цитата
Мультипликатор написал:  aaa = IE.Document.getElementsByID("place").Value
Цитата
Doober написал: aaa = IE.Document.getElementById("place").innerText
Найдите отличие.
 
Да-да. Спасибо. С этим я разобрался. s в конце - множественное число. Если с s, то это коллекция, а если без s - то отдельный элемент.
Эту свою ошибку (безграмонтность) я понял.
Но тут еще наложилось, что на странице есть еще один элемент с id="place". И этот элемент идет выше, чем мой.
Соответственно, значение не совпадают.
Поэтому напрямую если, a = IE.Document.getElementByTagName("place").Value, то выдаст значение первого плэйса, а не моего.
 
Мультипликатор, а так?
Код
1
a = IE.Document.getElementsByTagName("place")(1).Value
 
Так тоже почему-то пустое значение.
Спасибо.
Я уже сделал перебором:  
Код
1
2
3
4
5
6
7
8
9
      For i = 300 To IE.Document.all.Length - 1
            ккк = IE.Document.all.Item(i).Name
            ннн = IE.Document.all.Item(i).tagName
            If ккк = "place" And ннн = "TEXTAREA" Then
                ТекстНаСайте = IE.Document.all.Item(i).innerText
                IE.Document.all.Item(i).innerText = МойТекст
                Exit For
            End If 'If ккк = "place" And ннн = "TEXTAREA" Then
       Next i
Вот так вот.
 
Добрый день, форумчане. Решил сюда написать, как в более подходящую тему.
Есть html страница, с которой надо вытащить инфо по валютам http://www.vl.ru/dengi/
так вот: не могу сослаться на data-currency из
Код
1
<INPUT align="right" class="input input_type_int rates-desktop__face-value-control-input" type="text" value="1" data-currency="USD" data-default="1">
в VBA. Подскажите, пжл, куда копать?
Код
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
Sub IE_AutiomationVL() 'Private Sub IE_Autiomation()
    Dim i As Long
    Dim IE As Object
    Dim objElement As Object
    Dim objCollection As Object
    Dim DC As String
    DC = "data-currency"
    ' Create InternetExplorer Object
    Set IE = CreateObject("InternetExplorer.Application")
  
    ' You can uncoment Next line To see form results
    IE.Visible = True
  
    ' Send the form data To URL As POST binary request
    IE.Navigate "http://www.vl.ru/dengi/"
  
    ' Statusbar
    Application.StatusBar = "www.vl.ru/dengi is loading. Please wait..."
  
    ' Wait while IE loading...
    Do While IE.Busy
        Application.Wait DateAdd("s", 1, Now)
    Loop
  
  
     
    Application.StatusBar = "Search form submission. Please wait..."
  
    Set objCollection = IE.Document.getElementsByTagName("input")
     
      
    i = 0
    While i < objCollection.Length
        If objCollection(i).data-currency = "USD" Then
  
            ' Set text for search
            objCollection(i).Value = "100"
  
        Else
            If objCollection(i).Type = "submit" And _
               objCollection(i).Name = "" Then
  
                ' "Search" button is found
                Set objElement = objCollection(i)
  
            End If
        End If
        i = i + 1
    Wend
    'objElement.Click    ' click button to search
     
    ' Wait while IE re-loading...
    Do While IE.Busy
        Application.Wait DateAdd("s", 1, Now)
    Loop
  
    ' Show IE
    IE.Visible = True
  
    ' Clean up
    Set IE = Nothing
    Set objElement = Nothing
    Set objCollection = Nothing
  
    Application.StatusBar = ""
End Sub
 
как вариант:
http://excelvba.ru/code/html

Код
1
2
' ищем ВСЕ теги input со свойством data-currency равным USD (функция вернёт массив значений в переменную arr)
arr = Split(GetTags(txt, "input", "data-currency", "USD", "outerHTML"), ARSEP)
 
Цитата
' ищем ВСЕ теги input со свойством data-currency равным USD (функция вернёт массив значений в переменную arr)
arr = Split(GetTags(txt, "input", "data-currency", "USD", "outerHTML"), ARSEP)
Спасибо! буду пробовать... отпишусь
Изменено: Boch1306 - 09.03.2017 10:44:07
 
Цитата
Boch1306 написал: arr = Split(GetTags(txt, "input", "data-currency", "USD", "outerHTML"), ARSEP)
не осилил сию конструкцию(((  
Страницы: 1
Читают тему
Наверх
Loading...