【问题标题】:Extract Text From Webpage and Save to Cell从网页中提取文本并保存到单元格
【发布时间】:2020-04-02 03:07:53
【问题描述】:

我很想得到一些帮助,因为我已经苦苦挣扎了一个多星期,试图找到答案。我有以下 HTML,需要提取总行号并将其保存到 Excel 字段中。

<div class="vcr_controls">
<input>
<span class="sr-only">Showing rows 1 to 100 of 166</span>
<span class="list_row_number_input">to "
<span id="random id_last_row">100</span>
of "
<span id="random id_total_rows">166</span>
</span>
</div>

我写的VBA如下:

Sub Test()
'/SET VARIABLES/
Dim loginPath as String
Dim totalRows as String
Dim IE as Object
LoginPath ="https:/domain.com/login"
Set IE = CreateObject("InternetExplorer.application")
IE.Visible = True
IE.Navigate loginPath
Do Until IE.ReadyState = 4
Loop
IE.Document.getElementByID("user_name").Value = "User"
IE.Document.getElementByID(user_password).Value = "Password"
'/SET VARIABLE AND REDIRECT
Dim cellURL as String
cellURL = Worksheet("Sheet1").Cells(2, "S").Value
loginPath = cellURL
IE.Navigate loginPath
Do Until IE.ReadyState = 4
Loop
'/NEED HELP HERE
Dim xobj
Set xobj = IE.Document.getElementById("vcr_controls").getElementsByClassName("list_row_input").Item(0)
Set xobj = xobj.getElementsByTagName("span").Item(1)
'/I CANNOT FIGURE OUT HOW TO EXTRACT THE TOTAL ROWS AND THEN SAVE THE NUMBER TO .Cells(2, "T")

由于 total_rows 跨度标签生成了一个随机的字母数字,我不能简单地通过类名来选择它。登录的整个第一部分工作得很好。

【问题讨论】:

  • 我认为你可以做一些寻找部分字符串的事情。试试...querySelectorAll("[id^='id_total_rows']")
  • 嗨,谢谢。我试过: Dim xobj Set xobj = IE.Document.querySelectorAll("[id^='id_total_rows']") Dim var1 = xobj MsgBox var1 消息框出现错误:[object NodeList] Do I need to convert the当我使用 Set 命令时对象到一个字符串?
  • 啊 - 尝试...querySelectorAll("[...]").innerText 获取字符串。
  • 我之前在尝试其他方法时得到了这个,但现在该框显示:[运行时错误'438':对象不支持此属性或方法]再次感谢

标签: html excel vba web-scraping


【解决方案1】:

试试下面的带有querySelector的CSS选择器,它返回一个节点。

ie.document.querySelector("span[id*='total_rows']").innerText

querySelectorAll 返回一个没有.innerText 属性的nodeList 对象。您需要索引nodeList,然后在检索到的节点元素上使用.innerText。我不确定id 是否是 id 字符串值的一部分,如果是,您可以扩展为:

ie.document.querySelector("span[id*='id_total_rows']").innerText

我对选择器过于冗长了;也许你可能会逃脱:

ie.document.querySelector("[id$='total_rows']").innerText

【讨论】:

    猜你喜欢
    • 2017-08-04
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多