MSXML2.ServerXMLHTTPオブジェクトのresponseプロパティが完全なhtmlソースを返さないのはなぜか疑問に思います。「内部html」のみを返しているようです。IEオブジェクトを作成して「外部HTML」を取得することはできますが、何百もの検索項目があるため、あまり効率的ではありません。
以下に示す関数(URLを使用)があり、HTMLコンテンツを文字列に割り当てます。
Sub test()
Dim myString As String
myString = getECICS2("103-90-2") ' myString only contains inner html
End Sub
Public Function getECICS(ByVal casNum As String) As String
Dim XMLhttp: Set XMLhttp = CreateObject("MSXML2.ServerXMLHTTP")
XMLhttp.setTimeouts 2000, 2000, 2000, 2000
XMLhttp.Open "GET", "http://ec.europa.eu/taxation_customs/dds2/ecics/chemicalsubstance_consultation.jsp?Lang=en&Cas=" & casNum & "&Cus=&CnCode=&EcCode=&UnCode=&Name=&LangNm=en&Inchi=&Characteristic=&sortOrder=1&Expand=true&offset=0&range=25", False
XMLhttp.send
If XMLhttp.Status = 200 Then
getECICS = XMLhttp.responseText
Else
getECICS = ""
End If
End Function
前もって感謝します
ティムは頭に釘を打ちました。HTMLがダウンロードされると、Webページはjavascriptを使用してページを更新します。これはブラウザで自動的に行われます。
以下のコードを実行すると、Chrome / IE / FFなどで表示できるhtmlファイルに応答がダンプされます。
Sub test()
Dim myString As String
myString = getECICS("103-90-2") ' myString only contains inner html
End Sub
Public Function getECICS(ByVal casNum As String) As String
Dim XMLhttp: Set XMLhttp = CreateObject("MSXML2.ServerXMLHTTP")
XMLhttp.setTimeouts 2000, 2000, 2000, 2000
XMLhttp.Open "GET", "http://ec.europa.eu/taxation_customs/dds2/ecics/chemicalsubstance_consultation.jsp?Lang=en&Cas=" & casNum & "&Cus=&CnCode=&EcCode=&UnCode=&Name=&LangNm=en&Inchi=&Characteristic=&sortOrder=1&Expand=true&offset=0&range=25", False
XMLhttp.send
If XMLhttp.Status = 200 Then
getECICS = XMLhttp.responseText
Else
getECICS = ""
End If
outputtext (getECICS)
End Function
Function outputtext(text As String)
Dim MyFile As String, fnum As String
MyFile = ThisWorkbook.Path & "\" & "test.html"
'set and open file for output
fnum = FreeFile()
Open MyFile For Output As fnum
'use Print when you want the string without quotation marks
Print #fnum, text
Close #fnum
End Function
残念ながら、最も簡単な解決策は、ブラウザまたはスクリプト対応のソリューションで自動化を実行して、必要なデータを取得することです。
最近の多くのサイトでは、javascript / AJAX / Loginセッションを使用して速度とリソースへのアクセスを制御しているため、ブラウザーを使用しないことで常に希望の速度を上げることができるとは限りません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加