Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.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
使用javascript抓取网页-由于错误80020101,无法完成操作_Javascript_Vba_Scripting - Fatal编程技术网

使用javascript抓取网页-由于错误80020101,无法完成操作

使用javascript抓取网页-由于错误80020101,无法完成操作,javascript,vba,scripting,Javascript,Vba,Scripting,我想从中提取一个表,我有两个问题: 在我得到表格之前,我需要通过点击Vol.列旁边的档位来更新更改的列,并需要根据图片进行设置,然后点击“Aceptar” 当我试图运行脚本“单击”齿轮时,我出现了以下错误 假设前一个问题已经解决,我如何才能抓住桌子?我应该重新加载页面吗? 代码如下: 子表() Dim ie作为InternetExplorer 将CurrentWindow设置为HTMLWindowProxy Url=”https://es.investing.com/stock-screene

我想从中提取一个表,我有两个问题:

  • 在我得到表格之前,我需要通过点击Vol.列旁边的档位来更新更改的列,并需要根据图片进行设置,然后点击“Aceptar” 当我试图运行脚本“单击”齿轮时,我出现了以下错误

  • 假设前一个问题已经解决,我如何才能抓住桌子?我应该重新加载页面吗?
    代码如下:
  • 子表()
    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