2013-07-23 2 views
3

Мне обычно приходится искать состояние NV для невостребованного свойства и помещать результаты в электронную таблицу Excel. Я пытаюсь автоматизировать процесс, но ограничусь использованием Excel 2010 и VBA. Ниже приведен URL-адрес сайта, на котором я пытаюсь отправить форму с помощью xmlhttp.XmlHttp Post в Excel VBA не обновляет форму сайта

URL: https://nevadatreasurer.gov/UPSearch/

Я создал класс для автоматизации отправки форм на других сайтах, но независимо от того, что я вхожу в PostData форма никогда не представлено. Ниже приводится мое представление и метод отправки формы.

Призыв к классу:

cXML.openWebsite "Post", "https://nevadatreasurer.gov/UPSearch/Index.aspx", _ 
       "ctl04$txtOwner=" & strSearchName 

метод Класс:

Public Sub openWebsite(strOpenMethod As String, strURL As String, _ 
Optional strPostData As String) 

pXmlHttp.Open strOpenMethod, strURL 


If strPostData <> "" Then 
    strPostData = convertSpaceToPlus(strPostData) 
    pXmlHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded" 
    pXmlHttp.send (strPostData) 
Else 
    pXmlHttp.send 
End If 

'Create DOM html documnet 
pHtmlObj.body.innerHTML = pXmlHttp.responseText 

End Sub 

Каждый раз, когда responseText является основной веб-сайт без каких-либо обновлений, как если бы я не представила POSTDATA. Я довольно новичок в автоматизации IE, но может ли кто-нибудь объяснить причину, почему это не работает, и пример кода, который работает?

Спасибо!

Обновление: 7/26/13 8:30 утра PST

без каких-либо изменений в мой метод, я смог представить формы через другой веб-сайт. Состояние формы невостребованного имущества. Это сработало отлично!

URL: https://oregonup.us/upweb/up/UP_search.asp

Однако я столкнулся с той же проблемой, когда я попробовал состояние CA сайта невостребованных собственности. Независимо от того, что я делаю, responseText всегда является исходной страницей поиска без обновления.

URL: https://scoweb.sco.ca.gov/UCP/Default.aspx

Он по-прежнему не работает с состоянием NV на мой оригинальный пост. Я использую правильные почтовые данные, URL, закодированные для каждого веб-сайта, и не вижу различий. Любая помощь будет оценена по достоинству.

ответ

2

Вы должны UrlEncode символы в этой строке:

"ctl04$txtOwner=" & strSearchName 

способов сделать это обсуждается здесь: SO link, поскольку VBA не имеет встроенную функцию для этого.

Знак доллара должен быть заменен на% 24 и любые пробелы с% 20. Если это единственные не-буквенно-цифровые символы в строке, вы можете сделать простой подход, используя VBA.Replace() (дважды). Вы в настоящее время заменяете пробелы «+», которые обычно работают, но знак доллара может быть проблемой.

6

Try ниже код

Public Sub openWebsite(strOpenMethod As String, strURL As String, Optional strPostData As String) 

    Dim pXmlHttp As Object 
    Set pXmlHttp = CreateObject("MSXML2.XMLHTTP") 
    pXmlHttp.Open strOpenMethod, strURL, False 
    pXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
    pXmlHttp.send (strPostData) 


    Dim pHtmlObj As Object 
    Set pHtmlObj = CreateObject("htmlfile") 
    pHtmlObj.body.innerHTML = pXmlHttp.ResponseText 
    MsgBox pXmlHttp.ResponseText 

End Sub 

Sub test() 
    Dim btnSearch As String, strSearchType As String, strSearchName As String, PostData As String 
    btnSearch = "Search" 
    strSearchType = "Owner" 
    strSearchName = "Santosh" 
    PostData = "ctl04%24txtOwner=" & strSearchName & "&ctl04%24btnSearch=" & btnSearch & "&ctl04%24rblSearchType=" & strSearchType 
    openWebsite "POST", "https://nevadatreasurer.gov/UPSearch/Index.aspx", PostData 
End Sub 

Сообщение вид данных с помощью Firebug

enter image description here

URL закодировать

enter image description here

ResponeText

enter image description here

+0

@Andy Я urlencoded мой POSTDATA вручную, и с помощью кода без изменения результатов. Обратный текст всегда является исходной страницей поиска без изменений. Вы не можете видеть весь ответ в MsgBox, но если вы сохраните текст, вы получите этот код: '

'Если вы просматриваете источник на веб-странице, вы получаете:'
< div id = "ctl04_pnlResults" style = "background-color: # 66CCFF; border-color: Blue; border-width: 2px; border-style: Solid;"> 'Последующие результаты – hr2d33

+0

Извините, Сантош, вы не возражаете взглянув на мой вопрос? Он похож на этот, и я основывал свой код на этом ответе. Однако у меня все еще есть проблемы с этим, и никто, кажется, не смотрит на мой вопрос ... Здесь: http://stackoverflow.com/questions/38570380/ Большое спасибо. – jony