Отправка данных формы через XMLHTTP в VBA - PullRequest
0 голосов
/ 08 августа 2011

Я работал через Excel 2010. Я пытаюсь отправить данные формы через объект XMLHTTP, чтобы получить веб-страницу без удачи. Веб-сайт, с которого я работаю, - http://espn.go.com/mlb/players, и я пытаюсь найти определенного игрока через окно поиска (например, Fister). Вот исходный код между тегами формы.

<form id="searchBox" name="searchBox" action="http://search.espn.go.com/results" method="get" accept-charset="utf-8" style="color: #999999;">
<div class="clearfix">
<input autocomplete="off" class="text" type="text" placeholder="Search" name="searchString" id="searchString" />
<input type="hidden" name="page" id="page" value="null" />
<input type="hidden" name="fromForm" value="true" />

<input class="submit" type="submit" value="" />
</div>
</form>

Мой код для попытки поиска приведен ниже.

Sub SearchPlayer()
Dim xml As MSXML2.ServerXMLHTTP
Dim search, url As String

search = "searchString=Fister&page=null&fromForm=true"
url = "http://espn.go.com/mlb/players"

Set xml = New MSXML2.ServerXMLHTTP
xml.Open "POST", url, False
xml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xml.send search

MsgBox xml.responseText

Set xml = Nothing
End Sub

1 Ответ

0 голосов
/ 12 августа 2011

Этот код работал для меня:

Function SearchPlayer(playerName As String) As String

Dim xml As MSXML2.XMLHTTP60
Dim result As String

Const BASE_URL As String = "http://search.espn.go.com/results?searchString={name}&page=null&fromForm=true"

Set xml = CreateObject("MSXML2.XMLHTTP.6.0")

With xml
  .Open "GET", Replace(BASE_URL, "{name}", playerName), False
  .send
End With

result = xml.responseText

SearchPlayer = result

End Function

(предполагается, что в вашей системе установлен MSXML 6.0 - msxml6.dll в локальной папке system32)

Как указано, форма используетзапрос GET, чтобы вы могли использовать атрибут ACTION и добавлять значения тегов INPUT в одну строку, например:

http://search.espn.go.com/results?searchString=Fister&page=null&fromForm=true

Я функционировал Sub, чтобы вы могли вызывать его с разнымиимена игроков, чтобы очистить каждую страницу.Конечно, вам понадобится функция urlencode, если вы ожидаете, что она будет вызываться с именами игроков, в которых есть пробелы ( вот один ).

...