Страницы: 1
RSS
загрузка файла на сайт через форму с помощью VBA
 
добрый день!

мне необходимо автоматизировать действия на сайте. одним из этих действий является выгрузка файла с диска на сайт через форму на сайте.
вот сайт
вот как я делаю:
Код
Function GetIE() As Object
  For Each GetIE In CreateObject("Shell.Application").Windows() 'Loop to find
    If (Not GetIE Is Nothing) And GetIE.name = "Internet Explorer" Then Exit For 'Found!
  Next GetIE
  If GetIE Is Nothing Then Exit Function
  GetIE.Visible = True 'Make IE window visible
End Function

Sub upload()
 Dim myShell As Object
    Dim ie As Object
    Set ie = GetIE
    ie.Navigate ("https://xmltools.corefiling.com/miniSchemaValidate/index.jsp")
    Do: DoEvents: Loop While ie.Busy Or ie.ReadyState <> 4 

    Set ElementCol = .getElementsByTagName("input")
     For Each btnInput In ElementCol
        If btnInput.name = "schema" Then
'btnInput.Click
btnInput.Value = "C:\Users\file.txt"
Exit For
        End If
    Next btnInput
.....
end sub
проблема в строке
Код
btnInput.Value = "C:\Users\file.txt"
она не присваивае т значение. т.е. не работает.

если я вручную тыкаю в форму и выбираю файл в открывшемся диалоговом окне, то после этого
debug.print btnInput.Value показывает путь к файлу, но вот программно присвоить путь не получается.
Изменено: Максим - 24.05.2019 23:26:36
 
Цитата
Максим написал: но вот программно присвоить путь не получается.
Что Вы подразумеваете под "программно"?
Может  так
ДИАЛОГОВОЕ ОКНО ВЫБОРА ФАЙЛОВ/ПАПКИ
Согласие есть продукт при полном непротивлении сторон
 
мне нужно передать путь к файлу форме на сайте, открытом через интернет эксплорер. я пытаюсь это сделать строкой:
Код
btnInput.Value = "C:\Users\[I]путь к файлу[/I]"
Изменено: Максим - 24.05.2019 23:25:53
 
Цитата
Максим написал: я пытаюсь это сделать строкой:btnInput.Value = "C:\Users\путь к файлу"
А это разве не 'программно'?
Согласие есть продукт при полном непротивлении сторон
 
это программно, но это не работает

значение не присваивается
 
Максим, а если прямым посылом по ссылке?
Скрытый текст
 
спасибо!

это очень круто! но мне бы всё таки нужно найти способ без post. в заданном мной вопросе адрес указан для примера. В действительности мне нужно работать с другим сайтом, и там работа происходит с участием ключа рутокен. Я в Вашем-то примере не понимаю как формируется текст post запроса..а с нужным мне сайтом и подавно закопаюсь.

с нажатием кнопок, заполнением форм и извлечением сведений из форм проблем нет. затык только с этой загрузкой файла (
 
Максим, я вас понял.
К сожалению, под этот сайт даже onchange не срабатывает. Других методов не знаю.

Есть такие грабли))
Код
#If VBA7 Then
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit Systems
#Else
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds as Long) 'For 32 Bit Systems
#End If

'''

With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
     .SetText "D:\example.xml"
     .PutInClipboard
End With
btnInput.Focus
Application.SendKeys " "
Sleep (250)
Application.SendKeys "^v"
Sleep (100)
Application.SendKeys "{ENTER}"
 
спасибо!

хороший вариант, но элемент на страничке не допускает ручной ввод пути. Курсор ставится, но ввести ничего не даёт. подозреваю что есть какое-то свойство (что-нибудь типа Editable) которое можно предварительно поставить в значение true. Пока перебираю все свойства с похожим смыслом.

я на правильном пути?
 
Цитата
Максим написал:
но элемент на страничке не допускает ручной ввод пути. Курсор ставится, но ввести ничего не даёт.
что-то вы делаете не то.
В моем последнем посте код копирует путь в буфер обмена, далее на страничке фокус падает на элемент кнопки, потом посылается системе активацию пробела, тем самим вызвав клик по кнопке и открытие окошка выбора файла, далее посылается команда CTRL + V - вставка текста(скопированного) в поле выбора файла и после этого энтер. Таким образом мы как бы эмулируем выбор файла. Если будете пошагово проверять - не выйдет,  IE активно должно быть в момент срабатывания SendKeys.
 
ааа..разобрался!!

у меня элемент вот так выглядит (на прикреплённой картинке) и после выбора файла руками (без макроса) в строке, куда указывает стрелочка, прописывается путь к файлу, но корректировать это поле форма не даёт.

я сначала решил что текст из буфера обмена вставляется в это поле. И, кстати, способа активировать это поле для ввода в него текста я не нашёл.
а не работало, т.к. окно IE  было свёрнуто. развернул его таким кодом:

Код
Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long 

ShowWindow IE.hwnd, 3 ' SW_SHOWMAXIMIZED = 3

без WinAPI не получилось развернуть.

не очень, конечно изящно внешне получилось, НО работает!! это главное

спасибо

Изменено: Максим - 31.05.2019 17:54:59
 
удалил. создал новую тему
Изменено: Максим - 03.06.2019 11:51:14
 
боюсь что офтоп..но и всё же

Jungl, благодаря вашему коду, спустя всего-то каких-то 2 года ) я разобрался с процессом валидации xml на сайте https://xmltools.corefiling.com/miniSchemaValidate/results.jsp


Скрытый текст
Изменено: Максим - 28.01.2022 17:06:25
Страницы: 1
Наверх