Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从网站上抓取VBA数据_Vba_Excel_Web Scraping - Fatal编程技术网

从网站上抓取VBA数据

从网站上抓取VBA数据,vba,excel,web-scraping,Vba,Excel,Web Scraping,当我执行VBA脚本以查找特定网页上tr元素的数量时,document.getElementsByTagName(“tr”).length返回零 Sub AutomaticMode() Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.Navigate "https://www.example.com/" Do While IE.readyState < 4 Application.S

当我执行VBA脚本以查找特定网页上tr元素的数量时,document.getElementsByTagName(“tr”).length返回零

Sub AutomaticMode()
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate "https://www.example.com/"
Do While IE.readyState < 4
    Application.StatusBar = "DOM Loading ..."
Loop
Set username_field = IE.document.getElementByID("username")
username_field.Value = "username"
Set password_field = IE.document.getElementByID("password")
password_field.Value = "password"
SendKeys "{Tab}{Enter}"
Do While IE.readyState < 4
    Application.StatusBar = "DOM Loading ..."
Loop
Dim trList As IHTMLElementCollection
Set trList = IE.document.getElementsByTagName("tr")
MsgBox (trList.Length)
End Sub
子自动模式()
设置IE=CreateObject(“InternetExplorer.Application”)
可见=真实
即“导航”https://www.example.com/"
当IE.readyState<4时执行
Application.StatusBar=“DOM加载…”
环
设置用户名\字段=IE.document.getElementByID(“用户名”)
username\u field.Value=“username”
设置密码\字段=IE.document.getElementByID(“密码”)
password\u field.Value=“password”
SendKeys“{Tab}{Enter}”
当IE.readyState<4时执行
Application.StatusBar=“DOM加载…”
环
Dim trList As IHTMLELELEmentCollection
设置trList=IE.document.getElementsByTagName(“tr”)
MsgBox(trList.Length)
端接头

在页面完全加载之前执行宏不会导致在您的网站上找到任何tr标记。尝试更改:

Do While IE.readyState < 4
当IE.readyState<4时执行

致:

当IE.readyState<4或IE.Busy时执行


即使这样,也不能保证在启动宏之前加载所有内容,但通常会有所帮助,并且始终包含它是一种很好的做法。有时,您需要在前端找到显示“加载”等内容的对象,并在HTML元素中循环,直到它消失-这样您就可以安全地运行脚本。

在页面完全加载之前执行宏不会导致在您的网站上找到任何tr标记。尝试更改:

Do While IE.readyState < 4
当IE.readyState<4时执行

致:

当IE.readyState<4或IE.Busy时执行


即使这样,也不能保证在启动宏之前加载所有内容,但通常会有所帮助,并且始终包含它是一种很好的做法。有时,您需要在前端找到显示“加载”等内容的对象,并在HTML元素中循环,直到它消失-这样您就可以安全地运行脚本了。

关于
trList.Count
?trList.Count使程序返回错误:“对象不支持此属性或方法”trList是一个IHTMLElementCollection,如果它有帮助的话。如果您在
Set trList=…
行上加了一个中断,并在继续执行之前等待一段时间,这会改变结果吗?请尝试这样声明
trList
Dim trList As Object
,然后尝试使用
.count
我刚刚测试过,对于'div',它返回的是正确的长度-总共18 divs-但是对于tr,它不是,并且页面在其源代码中也没有显示任何帧(考虑到tr可能在单独的帧中)
trList.count
?trList.count使程序返回错误:“对象不支持此属性或方法“trList是一个IHTMlementCollection,如果它有帮助的话。如果您在
设置trList=…
行上设置一个中断,并在继续执行之前等待一段时间,这会改变结果吗?请尝试这样声明
trList
Dim trList As Object
,然后尝试使用
.count
我刚刚测试过,对于'div',它返回的是正确的长度-总共18 divs-但是对于tr,它不是,并且页面在其源代码中也没有显示任何帧(考虑到tr可能在一个单独的帧中)很好,但是我会选择
而不是
只是为了更安全。不过还是不能保证什么。谢谢!你的回答是正确的。虽然IE.readyState<4和IE.Busy没有返回结果,但问题是“tr”元素是在加载页面后加载的。将脚本置于
等待
5秒钟后,它才开始寻找tr,最终返回了tr!再次感谢!!这句话应该用“or”,而不是“and”,我的错误是因为我习惯了用“until”来表示。说得好,但为了更安全起见,我会选择
而不是
。不过还是不能保证什么。谢谢!你的回答是正确的。虽然IE.readyState<4和IE.Busy
没有返回结果,但问题是“tr”元素是在加载页面后加载的。将脚本置于
等待
5秒钟后,它才开始寻找tr,最终返回了tr!再次感谢!!这句话应该用“或”,而不是“和”,这是事实,因为我习惯用“直到”来表示我的错误。