网站无法识别通过 VBA 代码完成的选择
Website not recognizing selection done through VBA code
下面提到的代码工作正常,我面临的问题是当我输入验证码并单击继续按钮时,该网站无法识别 NetBanking 选项卡的 selection,所述 selection 仅通过下面提到的 VBA 代码完成。
我必须手动 select 它然后才继续进行。
错误在附图中用红色箭头标记。
可能的更正应该是什么?
Sub TDS_Autofill()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate "https://onlineservices.tin.egov-nsdl.com/etaxnew/tdsnontds.jsp"
Do While IE.Busy
Application.Wait DateAdd("s", 1, Now)
Loop
Set doc = IE.document
doc.parentWindow.execScript "sendRequest(281)", "JavaScript"
Do While IE.Busy
Application.Wait DateAdd("s", 1, Now)
Loop
If ThisWorkbook.Sheets("Challan AutoFill").Range("n2").Value = "Company" Then
doc.getElementById("0020").Click
ElseIf ThisWorkbook.Sheets("Challan AutoFill").Range("n2").Value = "Non Company" Then
doc.getElementById("0021").Click
End If
If ThisWorkbook.Sheets("Challan AutoFill").Range("p2").Value = "(200) TDS/TCS Payable by Taxpayer" Then
doc.getElementById("200").Click
ElseIf ThisWorkbook.Sheets("Challan AutoFill").Range("p2").Value = "(400) TDS/TCS Regular Assessment" Then
doc.getElementById("400").Click
End If
IE.document.querySelector("select.form-control").selectedIndex = ThisWorkbook.Sheets("Challan AutoFill").Range("s2").Value
doc.getElementById("NetBanking").Click
doc.getElementById("NetBank_Name_c").Value = ThisWorkbook.Sheets("Challan AutoFill").Range("u2").Value
doc.getElementsByName("TAN")(1).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("b2").Value
IE.document.querySelector("select[name=AssessYear]").selectedIndex = ThisWorkbook.Sheets("Challan AutoFill").Range("m2").Value
doc.getElementsByName("Add_Line1")(1).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("c2").Value
doc.getElementsByName("Add_Line2")(1).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("d2").Value
doc.getElementsByName("Add_Line3")(1).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("e2").Value
doc.getElementsByName("Add_Line4")(1).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("f2").Value
doc.getElementsByName("Add_Line5")(1).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("g2").Value
IE.document.querySelector("select[name=Add_State]").selectedIndex = 21
doc.getElementsByName("Add_PIN")(1).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("i2").Value
doc.getElementsByName("Add_EMAIL")(0).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("j2").Value
doc.getElementsByName("Add_MOBILE")(0).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("K2").Value
End Sub
触发与每个下拉菜单 (select
) 关联的 onchange
事件。此外,在整个过程中使用更快的 css 选择器,您可以改善页面加载等待条件。用更快的 id + class 替换类型 + 属性选择器。使用 querySelector 以便在收集集合和索引时使用单个元素。
Option Explicit
Public Sub TDS_Autofill()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = True
.Navigate2 "https://onlineservices.tin.egov-nsdl.com/etaxnew/tdsnontds.jsp"
While .Busy Or .readyState <> 4: DoEvents: Wend
.document.parentWindow.execScript "sendRequest(281)"
While .Busy Or .readyState <> 4: DoEvents: Wend
With .document
.querySelector("# 021").Click
.querySelector("# 00").Click
.querySelector("[value='94C - Payment of contractors and sub-contractors']").Selected = True
.querySelector("#div_nature_error .form-control").FireEvent "onchange"
.querySelector("[value='Axis Bank|https://www.axisbiconnect.co.in/tax/tax.asp']").Selected = True
.querySelector("#NetBank_Name_c").FireEvent "onchange"
.querySelector("#div_nature_error .form-control").selectedIndex = 2
.querySelector(".input-pan").Value = "BPLU00890B"
With .querySelector("#div_assessment_error .form-control")
.selectedIndex = 3
.FireEvent "onchange"
End With
.querySelector("#div_add_line1_error .form-control").Value = "83/18"
.querySelector("#div_add_line2_error .form-control").Value = "Advance College"
.querySelector("#div_add_line4_error .form-control").Value = "Vishnu Pura"
.querySelector("#div_add_line5_error .form-control").Value = "Ujjain"
With .querySelector("#div_state_error .form-control")
.selectedIndex = 21
.FireEvent "onchange"
End With
.querySelector("#div_pincode_error .form-control").Value = "your_pin"
.querySelector("#div_email_error .form-control").Value = "your_email@gmail.com"
.querySelector("#div_mobile_error .form-control").Value = "your_mobile"
Stop 'Enter captcha
.querySelector("#Submit").Click
Stop '<== delete me later
End With
.Quit
End With
End Sub
下面提到的代码工作正常,我面临的问题是当我输入验证码并单击继续按钮时,该网站无法识别 NetBanking 选项卡的 selection,所述 selection 仅通过下面提到的 VBA 代码完成。
我必须手动 select 它然后才继续进行。
错误在附图中用红色箭头标记。
可能的更正应该是什么?
Sub TDS_Autofill()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate "https://onlineservices.tin.egov-nsdl.com/etaxnew/tdsnontds.jsp"
Do While IE.Busy
Application.Wait DateAdd("s", 1, Now)
Loop
Set doc = IE.document
doc.parentWindow.execScript "sendRequest(281)", "JavaScript"
Do While IE.Busy
Application.Wait DateAdd("s", 1, Now)
Loop
If ThisWorkbook.Sheets("Challan AutoFill").Range("n2").Value = "Company" Then
doc.getElementById("0020").Click
ElseIf ThisWorkbook.Sheets("Challan AutoFill").Range("n2").Value = "Non Company" Then
doc.getElementById("0021").Click
End If
If ThisWorkbook.Sheets("Challan AutoFill").Range("p2").Value = "(200) TDS/TCS Payable by Taxpayer" Then
doc.getElementById("200").Click
ElseIf ThisWorkbook.Sheets("Challan AutoFill").Range("p2").Value = "(400) TDS/TCS Regular Assessment" Then
doc.getElementById("400").Click
End If
IE.document.querySelector("select.form-control").selectedIndex = ThisWorkbook.Sheets("Challan AutoFill").Range("s2").Value
doc.getElementById("NetBanking").Click
doc.getElementById("NetBank_Name_c").Value = ThisWorkbook.Sheets("Challan AutoFill").Range("u2").Value
doc.getElementsByName("TAN")(1).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("b2").Value
IE.document.querySelector("select[name=AssessYear]").selectedIndex = ThisWorkbook.Sheets("Challan AutoFill").Range("m2").Value
doc.getElementsByName("Add_Line1")(1).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("c2").Value
doc.getElementsByName("Add_Line2")(1).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("d2").Value
doc.getElementsByName("Add_Line3")(1).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("e2").Value
doc.getElementsByName("Add_Line4")(1).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("f2").Value
doc.getElementsByName("Add_Line5")(1).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("g2").Value
IE.document.querySelector("select[name=Add_State]").selectedIndex = 21
doc.getElementsByName("Add_PIN")(1).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("i2").Value
doc.getElementsByName("Add_EMAIL")(0).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("j2").Value
doc.getElementsByName("Add_MOBILE")(0).Value = ThisWorkbook.Sheets("Challan AutoFill").Range("K2").Value
End Sub
触发与每个下拉菜单 (select
) 关联的 onchange
事件。此外,在整个过程中使用更快的 css 选择器,您可以改善页面加载等待条件。用更快的 id + class 替换类型 + 属性选择器。使用 querySelector 以便在收集集合和索引时使用单个元素。
Option Explicit
Public Sub TDS_Autofill()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = True
.Navigate2 "https://onlineservices.tin.egov-nsdl.com/etaxnew/tdsnontds.jsp"
While .Busy Or .readyState <> 4: DoEvents: Wend
.document.parentWindow.execScript "sendRequest(281)"
While .Busy Or .readyState <> 4: DoEvents: Wend
With .document
.querySelector("# 021").Click
.querySelector("# 00").Click
.querySelector("[value='94C - Payment of contractors and sub-contractors']").Selected = True
.querySelector("#div_nature_error .form-control").FireEvent "onchange"
.querySelector("[value='Axis Bank|https://www.axisbiconnect.co.in/tax/tax.asp']").Selected = True
.querySelector("#NetBank_Name_c").FireEvent "onchange"
.querySelector("#div_nature_error .form-control").selectedIndex = 2
.querySelector(".input-pan").Value = "BPLU00890B"
With .querySelector("#div_assessment_error .form-control")
.selectedIndex = 3
.FireEvent "onchange"
End With
.querySelector("#div_add_line1_error .form-control").Value = "83/18"
.querySelector("#div_add_line2_error .form-control").Value = "Advance College"
.querySelector("#div_add_line4_error .form-control").Value = "Vishnu Pura"
.querySelector("#div_add_line5_error .form-control").Value = "Ujjain"
With .querySelector("#div_state_error .form-control")
.selectedIndex = 21
.FireEvent "onchange"
End With
.querySelector("#div_pincode_error .form-control").Value = "your_pin"
.querySelector("#div_email_error .form-control").Value = "your_email@gmail.com"
.querySelector("#div_mobile_error .form-control").Value = "your_mobile"
Stop 'Enter captcha
.querySelector("#Submit").Click
Stop '<== delete me later
End With
.Quit
End With
End Sub