- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 MSXML2 和 IHTMLDocument
处理 HTML 网页的 iframe 部分。
我想使用 MSXML2 并将其保存以更好地“捕获”数据,认为它比仅使用 InternetExplorer 或 VBA 菜单支持的 VBA Selenium 引用更快。
(我不想尽可能避免使用 IE 或 selenium)
但是我不知道如何将文档保存为 XML 格式(以利用其速度),同时在没有浏览器(即 Selenium )帮助的情况下单击文档中的元素。
甚至在单击 this web page 上的某些选项卡(id="cns_Tab21") 之后,我很难检索数据。
所以我的问题是..
1> 是否可以尽量减少使用浏览器进行点击?
2> 即使在单击(使用 Selenium)之后,它也会在 VBA 编辑器中引发与 xpath 相关的错误。
感谢您提前回答,用于此的 URL 是
http://bitly.kr/finance
链接内的 iframe 是 http://bitly.kr/LT0aCb
'I declared objects
Dim XMLReq As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
Dim iframeDoc As IHTMLDocument
'and saved XML data to HTML format
HTMLDoc.body.innerHTML = XMLReq.responseText
'and trying to save this HTML to iframe...
Set iframeDoc = HTMLDoc.getElementById("coinfo_cp")
'I tried .contentDocument but it maybe HTMLdoc doesn't have this property.
and I don't know how to access information I saved to iframeDoc above.
'And after I use Selenium I can't figure out why it throw an error
For Each ele In selenium.FindElementsByTag("th")
If ele.Attribute("innerText") = "CAPEX" Then
Debug.Print ele.FindElementsByXPath("./../td").Attribute("innerText")
最佳答案
您可以在选择该选项卡(而不是 iframe)时复制页面发出的 xhr 请求。我使用剪贴板将表格复制到 Excel。注意:我使用的网址来自我们的讨论。此信息应反射(reflect)在问题中。
Option Explicit
Public Sub GetTable()
'VBE > Tools > References > Microsoft HTML Object Library
Dim html As HTMLDocument, hTable As HTMLTable, clipboard As Object
Set html = New HTMLDocument
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://navercomp.wisereport.co.kr/v2/company/ajax/cF1001.aspx?cmp_cd=005930&fin_typ=0&freq_typ=Y&encparam=ZXR1cWFjeGJnS1lWOHhCYmNScmJXUT09&id=bG05RlB6cn", False
.setRequestHeader "User-Agent", "Mozilla/5.0"
.send
html.body.innerHTML = .responseText
End With
Set hTable = html.querySelector(".hbG05RlB6cn + .gHead01")
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") ' New DataObject
clipboard.SetText hTable.outerHTML
clipboard.PutInClipboard
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1).PasteSpecial
End Sub
Option Explicit
Public Sub GetTable()
'https://navercomp.wisereport.co.kr/v2/company/c1010001.aspx?cmp_cd=005930
'VBE > Tools > References > Microsoft HTML Object Library
Dim html As HTMLDocument, hTable As HTMLTable, clipboard As Object, ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set html = New HTMLDocument
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://navercomp.wisereport.co.kr/v2/company/ajax/cF1001.aspx?cmp_cd=005930&fin_typ=0&freq_typ=Y&encparam=ZXR1cWFjeGJnS1lWOHhCYmNScmJXUT09&id=bG05RlB6cn", False
.setRequestHeader "User-Agent", "Mozilla/5.0"
.send
html.body.innerHTML = .responseText
End With
Set hTable = html.querySelector(".hbG05RlB6cn + .gHead01") '2nd tab. CAPEX row
Dim html2 As HTMLDocument, i As Long
Set html2 = New HTMLDocument
html2.body.innerHTML = hTable.outerHTML
Dim tableBodyRows As Object, tableBodyRowLength As Long, tableHeaderRowLength As Long, tableHeaderRows As Object, targetRow As Long
Set tableBodyRows = html2.querySelectorAll("tbody tr .bg")
tableBodyRowLength = tableBodyRows.Length
tableHeaderRowLength = html2.querySelectorAll("thead tr").Length + 2
For i = 0 To tableBodyRowLength - 1
If Trim$(tableBodyRows.item(i).innerText) = "CAPEX" Then
targetRow = i + tableHeaderRowLength + 1
Exit For
End If
Next
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") ' New DataObject
clipboard.SetText hTable.outerHTML
clipboard.PutInClipboard
ws.Cells(1, 1).PasteSpecial
Dim unionRng As Range
For i = (tableHeaderRowLength + 1) To (tableBodyRowLength + tableHeaderRowLength)
If i <> targetRow Then
If Not unionRng Is Nothing Then
Set unionRng = Union(ws.rows(i), unionRng)
Else
Set unionRng = ws.rows(i)
End If
End If
Next
If Not unionRng Is Nothing Then unionRng.Delete
End Sub
关于excel - VBA : how to connect MSXML2. XMLHTTP60 对 IHTMLDocument(iframe) 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55648814/
来自this example的新手ajax问题: 在 xmlhttp.open() 和 xmlhttp.send() 之前如何分配 xmlhttp.responseText ? (如果我们需要demo
有两个progid。我见过两个都用过。 任何人都知道我什么时候应该使用一个,什么时候应该使用另一个? 最佳答案 你绝对不应该使用 Microsoft.XmlHttp。 来自 Microsoft XML
实际上我正在开发一个聊天框......但它不符合这个条件。 这是代码 function submitChat() { if (form1.users.value == "" || form1.me
网络服务器正在返回状态代码和描述以响应 XmlHttp 的请求。成分。来自服务器的实际状态响应开头为: HTTP/1.1 400 Not a valid http POST request 我可以在
我的问题是更多的搜索基础,但是如果我更改 readState 值意味着 4 以外的值会发生什么,如果我更改状态值 200 会发生什么以及为什么这里使用常量值或神奇数字 最佳答案 这不是神奇的数字。 您
我已阅读 the MSDN blog post关于它。 和 this question对我也没有太大帮助。 据我所知,检查 Microsoft.XmlHttp 就足够了。 你能确认一下吗 thisbu
我在我的页面上尝试使用 ajax。但它不起作用,因为 if (xmlhttp.readyState==4 && xmlhttp.status==200) 始终为 false。我已经提醒了 xmlhtt
我正在通过ajax发送电子邮件来联系php。 Php 脚本成功发送电子邮件,但 ajax xmlhttp.readyState 始终返回 2,即使 xmlhttp.status 为 200。 para
我希望这两个对象调用都指向 ActiveXObject。 但是为什么我们要传递两个不同的参数才能在 IE 中工作。 1. Msxml2.XMLHTTP 和 2. 微软.XMLHTTP 他们都一样吗?或
代码如下: url="http://www.csdn.net/" wstr=getHTTPPage(url) start=Newst
我正在编写一组 VBA 宏,其中使用 XMLHTTP 对象向服务器发送异步请求。我发送基本身份验证: XMLHttpReq.setRequestHeader "Authorization","Basi
我正在尝试使用 xmlhttp 和 VBA 抓取网站。 Url 有一个井号 (#) 符号,被 VBA 误解了...... 这与此处解释的问题相同: Error in XMLHTTP Get reque
我当前使用的 xmlhttp 函数正在将一个非常小的 int 传递到 php 文件,以便使用 GET 方法进行处理。 xmlhttp=GetXmlHttpObject(); if (x
我需要严格遵守我的xml文档中元素的顺序。如果我使用 XmlHttpContent 序列化程序来形成 xml 内容,字段将按字母顺序排序。 有没有办法明确指定 xml 中元素的顺序?或者还有其他方法可
我正在尝试使用 javascript 并阅读 from http://search.yahooapis.com/ WebSearchService /V1/webSearch?appid=YahooD
url太长就会提示没有权限,ie8不会,这应该跟浏览器有关的 其实有个问题你注意一下就是,改成POST 方式传就解决了 this.xmlHttp.open("POST", thi
我的 AJAX 不工作,我不知道为什么。我错过了什么?? ReferenceError: xmlhttp 未定义@ javascript.js:5 function insapts(pin){
我有一个从这个 url 获取表格的代码 https://www.reuters.com/companies/AAPL.OQ/financials/income-statement-annual 代码没
我正在尝试让 Excel 从搜索引擎中检索数据 (torrentz.eu/search?q=abc) 它应该获取第一个链接的信息并将其显示在 Excel 上: 单元格 A1:我的查询 单元格 A2:链
我正在尝试使用此代码抓取网站以提取姓名和联系人... Sub Test() Dim htmlDoc As Object Dim htmlDoc2 As Object Di
我是一名优秀的程序员,十分优秀!