小黑猪哈哈 2024-12-02 13:58 采纳率: 50%
浏览 15
已结题

要怎么用VBA Selenium操作浏览器登录中国国际贸易单一窗口

我怎么试都不行,总是提示我的网页元素不对,定位不了,我实在是没办法了,我没有网页的基础,VBA也是最近百度在边用边学的,找了很多资料,我猜应该这是一个iframe窗口,可能需要用什么代码/语法进到这个iframe窗口里面才能操作这里面的内容,求各位指教,我最终是希望通过VBA自动登陆这个网站,然后在里面的界面上传核注清单导入文件,但是第一步登陆就卡住了,我用同样的方式操作其他的网页都能登陆,不过其他网页的构造应该是比较简单的。

手工操作步骤:打开首页-点击卡介质-输入卡密码-点击登陆-登陆成功网页跳转-选择加贸保税中的加工贸易手册-网页跳转-点击进口核注清单-点击导入按钮-选择本地文件-上传-上传成功-点击暂存

奉上我的VBA代码,请高人指点?
网址在这:https://sz.singlewindow.cn/index

Sub start_chrome()
'声明并实例化一个chromedriver。
Dim chrome_driver As New ChromeDriver
'指定chrome浏览器程序的位置。
chrome_driver.SetBinary "C:\Program Files\Google\Chrome\Application\chrome.exe"
 
'设置隐性等待时间,即加载刷新网页等待返回成功的时间。默认30s。如果网速等原因,一个网页可能超时。用这个时间,可以设置等待时间。
chrome_driver.Timeouts.ImplicitWait = 60
'启动
chrome_driver.Start "chrome"
'转到单一窗口网页
chrome_driver.Get "https://sz.singlewindow.cn/index"
chrome_driver.Wait 5000
'转到单独登陆的iframe窗口页面
chrome_driver.Get "https://app.singlewindow.cn/cas/login?_local_card_flag=1&service=https%3A%2F%2Fapp.singlewindow.cn%2Fcas%2Fjump.jsp%3FtoUrl%3DaHR0cHM6Ly9hcHAuc2luZ2xld2luZG93LmNuL2Nhcy9vYXV0aDIuMC9hdXRob3JpemU.Y2xpZW50X2lkPXN6MDAwMDAwMDBWZTRTOUowMTQmcmVzcG9uc2VfdHlwZT1jb2RlJnJlZGlyZWN0X3VyaT1odHRwcyUzQSUyRiUyRnN6LnNpbmdsZXdpbmRvdy5jbiUyRk9BdXRoTG9naW5Db250cm9sbGVy&configInfoB64=JmNvbG9yQTE9RkZGRkZGJmNvbG9yQTI9NzUsNzksODQsMC43NQ%3D%3D&_local_login_flag=1&logoutFlag=1&localServerUrl=https%3A%2F%2Fsz.singlewindow.cn&localDeliverParaUrl=%2Fdeliver_para.jsp"
chrome_driver.Wait 5000
'点击卡介质、输入密码、点击登录
chrome_driver.FindElementById("//*[@id='span31']").Click
chrome_driver.FindElementById("//*[(@id = 'password')]").SendKeys Range("A1")
chrome_driver.FindElementById("//*[@id='loginbutton']").Click
End Sub
 

img

  • 写回答

1条回答 默认 最新

  • JavaPub-rodert 领域专家: 后端开发技术领域 2024-12-04 10:31
    关注

    本答案参考多次询问ChatGPT-3.5后选择的最佳回答,若是满意,还请采纳,谢谢。

    你的VBA代码中存在几个问题,导致无法正确定位和操作网页元素:

    1. 元素定位问题:你使用的XPath可能不正确或者已经改变。需要检查当前网页的元素结构,使用正确的XPath或CSS选择器。

    2. iframe切换问题:如果登录表单在iframe中,需要先切换到该iframe,然后才能操作其中的元素。

    3. 等待时间不足:可能需要增加等待时间,确保页面元素已经加载完成。

    以下是修改后的代码示例,增加了iframe切换和调整了元素定位方式:

    Sub start_chrome()
        '声明并实例化一个chromedriver。
        Dim chrome_driver As New ChromeDriver
        '指定chrome浏览器程序的位置。
        chrome_driver.SetBinary "C:\Program Files\Google\Chrome\Application\chrome.exe"
      
        '设置隐性等待时间,即加载刷新网页等待返回成功的时间。默认30s。如果网速等原因,一个网页可能超时。用这个时间,可以设置等待时间。
        chrome_driver.Timeouts.ImplicitWait = 60
        '启动
        chrome_driver.Start "chrome"
        '转到单一窗口网页
        chrome_driver.Get "https://sz.singlewindow.cn/index" 
        chrome_driver.Wait 5000
      
        '转到单独登陆的iframe窗口页面
        chrome_driver.Get "https://app.singlewindow.cn/cas/login?_local_card_flag=1&service=https%3A%2F%2Fapp.singlewindow.cn%2Fcas%2Fjump.jsp%3FtoUrl%3DaHR0cHM6Ly9hcHAuc2luZ2xld2luZG93LmNuL2Nhcy9vYXV0aDIuMC9hdXRob3JpemU.Y2xpZW50X2lkPXN6MDAwMDAwMDBWZTRTOUowMTQmcmVzcG9uc2VfdHlwZT1jb2RlJnJlZGlyZWN0X3VyaT1odHRwcyUzQSUyRiUyRnN6LnNpbmdsZXdpbmRvdy5jbiUyRk9BdXRoTG9naW5Db250cm9sbGVy&configInfoB64=JmNvbG9yQTE9RkZGRkZGJmNvbG9yQTI9NzUsNzksODQsMC43NQ%3D%3D&_local_login_flag=1&logoutFlag=1&localServerUrl=https%3A%2F%2Fsz.singlewindow.cn&localDeliverParaUrl=%2Fdeliver_para.jsp" 
        chrome_driver.Wait 5000
      
        ' 切换到iframe
        chrome_driver.SwitchToFrame "iframeId" ' 需要替换为实际的iframe ID或名称
      
        '点击卡介质、输入密码、点击登录
        chrome_driver.FindElementById("span31").Click
        chrome_driver.FindElementById("password").SendKeys Range("A1")
        chrome_driver.FindElementById("loginbutton").Click
      
        ' 切回主文档
        chrome_driver.SwitchToDefaultContent
    End Sub
    

    请注意:

    • iframeId 需要替换为实际的iframe ID或名称,你可以通过检查网页元素找到正确的ID。
    • 确保你的元素ID和XPath是最新的,可以通过浏览器的开发者工具检查。

    希望这些修改能帮助你成功登录并操作中国国际贸易单一窗口网站。如果还有问题,建议检查网页结构和元素定位是否正确。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月4日
  • 创建了问题 12月2日