使用javascript抓取网页-由于错误80020101,无法完成操作
我想从中提取一个表,我有两个问题:使用javascript抓取网页-由于错误80020101,无法完成操作,javascript,vba,scripting,Javascript,Vba,Scripting,我想从中提取一个表,我有两个问题: 在我得到表格之前,我需要通过点击Vol.列旁边的档位来更新更改的列,并需要根据图片进行设置,然后点击“Aceptar” 当我试图运行脚本“单击”齿轮时,我出现了以下错误 假设前一个问题已经解决,我如何才能抓住桌子?我应该重新加载页面吗? 代码如下: 子表() Dim ie作为InternetExplorer 将CurrentWindow设置为HTMLWindowProxy Url=”https://es.investing.com/stock-screene
代码如下:
子表()
Dim ie作为InternetExplorer
将CurrentWindow设置为HTMLWindowProxy
Url=”https://es.investing.com/stock-screener/?sp=country::5|部门::a |行业::a |股权类型::a |交易所::a | eq |市场|上限::110630000001990000000000%3Ceq |市场|上限;1“
Set ie=新的InternetExplorer
可见=真实
浏览网址
当ie.Busy=True或ie.readyState 4:DoEvents:Loop时执行
设置html=ie.document
设置CurrentWindow=html.parentWindow
调用CurrentWindow.execScript(“columnsSettings\u stock\u screener.colSelectIconClick(event)”),此行将显示错误
端接头
我不熟悉vba
脚本编写,但符合以下要求:
Call CurrentWindow.execScript(
"columnsSettings_stock_screener.colSelectIconClick(event)"
)
未定义事件。如果在浏览器中打开页面并运行:
columnsSettings_stock_screener.colSelectIconClick(event)
在您的devtool中,您将获得:
Uncaught TypeError: Cannot read property 'stopPropagation' of undefined
at ColumnsSettings.colSelectIconClick (columnsSettings-1.22.min.js:2)
at <anonymous>:1:32
使用execScript执行onclick函数,然后循环并取消选择不需要的项目,以启用选择所需的项目 请另外问一个关于刮桌子的问题。首先让这一点起作用,但请注意它有一个非常清晰的id,您可以使用resultsTable,这样我就可以简单地使用
ie.document.querySelector(“#resultsTable”)
,并使用它来传输.outerHTML
以便将表复制粘贴到Excel
Option Explicit
Public Sub table()
Dim ie As SHDocVw.InternetExplorer, i As Long, url As String
url = "https://es.investing.com/stock-screener/?sp=country::5|sector::a|industry::a|equityType::a|exchange::a|eq_market_cap::110630000,1990000000000%3Ceq_market_cap;1"
Set ie = New InternetExplorer
ie.Visible = True
ie.Navigate url
Do While ie.Busy = True Or ie.readyState <> 4: DoEvents: Loop
ieDocument.execScript "columnsSettings_stock_screener.colSelectIconClick(new Event('click'));)" 'or uglier columnsSettings_stock_screener.colSelectIconClick(document.querySelector('#colSelectIcon_stock_screener').click());
Dim switchOffs(), switchOns(), selector As String
switchOffs = Array(6, 7, 10, 11)
switchOns = Array(1, 2, 3, 4, 5, 8, 9)
With ie.document
For i = LBound(switchOffs) To UBound(switchOffs)
selector = "#SS_" & CStr(switchOffs(i))
With .querySelector(selector)
If .Checked = True Then .Click 'vba you may be able to do If .Checked Then .Click
End With
Next
For i = LBound(switchOns) To UBound(switchOns)
selector = "#SS_" & CStr(switchOns(i))
With .querySelector(selector)
If .Checked = False Then .Click 'vba you may be able to do If not .Checked Then .Click
End With
Next
End With
Stop
End Sub
选项显式
公共子表()
Dim ie为SHDocVw.InternetExplorer,i为Long,url为String
url=”https://es.investing.com/stock-screener/?sp=country::5|部门::a |行业::a |股权类型::a |交易所::a | eq |市场|上限::110630000001990000000000%3Ceq |市场|上限;1“
Set ie=新的InternetExplorer
可见=真实
浏览网址
当ie.Busy=True或ie.readyState 4:DoEvents:Loop时执行
ieDocument.execScript“ColumnSettings_stock_screener.colSelectIconClick(新建事件('click'));”)或更丑陋的ColumnSettings_stock_screener.colSelectIconClick(document.querySelector('colSelectIcon_stock_screener')。click());
Dim SWITCHOFF()、switchOns()、选择器为字符串
开关=阵列(6、7、10、11)
开关=阵列(1、2、3、4、5、8、9)
用ie文件
对于i=LBound(关闭)至UBound(关闭)
选择器=“#SS#”和CStr(开关(i))
With.querySelector(选择器)
如果.Checked=True,则单击“vba”如果.Checked,则可以执行此操作。单击
以
下一个
对于i=LBound(切换)到UBound(切换)
选择器=“#SS#”和CStr(开关(i))
With.querySelector(选择器)
如果.Checked=False,则单击“vba”,否则您可以执行。如果未选中,则单击。单击
以
下一个
以
停止
端接头
R,我试过你的建议,但我错了运行时“424”:需要对象。但是我意识到我不需要玩这个窗口,因为它只是格式化屏幕视图,当我提取信息时,数据实际上就在那里。谢谢你的脚本。我已经尝试过了,但在运行ie.document.execrip命令时,出现了运行时错误“438”对象不支持此属性或方法的错误。如果我手动单击它,脚本的第二部分将正确检查选项。非常感谢。不客气。您是否也尝试了我注释掉的第二个execScript命令?
Call CurrentWindow.execScript(
"columnsSettings_stock_screener.colSelectIconClick(new Event('click'))"
)
Option Explicit
Public Sub table()
Dim ie As SHDocVw.InternetExplorer, i As Long, url As String
url = "https://es.investing.com/stock-screener/?sp=country::5|sector::a|industry::a|equityType::a|exchange::a|eq_market_cap::110630000,1990000000000%3Ceq_market_cap;1"
Set ie = New InternetExplorer
ie.Visible = True
ie.Navigate url
Do While ie.Busy = True Or ie.readyState <> 4: DoEvents: Loop
ieDocument.execScript "columnsSettings_stock_screener.colSelectIconClick(new Event('click'));)" 'or uglier columnsSettings_stock_screener.colSelectIconClick(document.querySelector('#colSelectIcon_stock_screener').click());
Dim switchOffs(), switchOns(), selector As String
switchOffs = Array(6, 7, 10, 11)
switchOns = Array(1, 2, 3, 4, 5, 8, 9)
With ie.document
For i = LBound(switchOffs) To UBound(switchOffs)
selector = "#SS_" & CStr(switchOffs(i))
With .querySelector(selector)
If .Checked = True Then .Click 'vba you may be able to do If .Checked Then .Click
End With
Next
For i = LBound(switchOns) To UBound(switchOns)
selector = "#SS_" & CStr(switchOns(i))
With .querySelector(selector)
If .Checked = False Then .Click 'vba you may be able to do If not .Checked Then .Click
End With
Next
End With
Stop
End Sub