找回密码
 加入
搜索
查看: 363|回复: 7

[网络通信] [已解决]怎样实现_IECreate()使用360浏览器打开网址后不再重新加载?

[复制链接]
发表于 2023-4-28 16:02:45 | 显示全部楼层 |阅读模式
本帖最后由 lanfengshijiu 于 2023-5-4 14:35 编辑

au3编挂课程序,打开指定学习网址加载成功后,模拟鼠标点击“开始学习”后自动学习视频,目前 _IECreate()用360浏览器打开网址加载成功后又重新加载一次,导致原计划加载成功后模拟点击鼠标无作用了。由于网址打开慢,未使用ShellExecuteWait命令,想判断加载成功后再模拟点击鼠标。各位大神,怎样实现_IECreate()打开网址后不再重新加载?
发表于 2023-4-28 16:37:36 | 显示全部楼层
可以试试使用_IEAttach()函数来打开已经加载并显示的页面,而不是重新加载页面。
; 打开网页
Global $oIE = _IECreate("https://your-webpage.com", 0, 1, 0, 1)

; 等待页面加载完成
_IELoadWait($oIE)

If @error Then
    MsgBox(0, "Error", "Failed to load the webpage!")
Else
    ; 连接到打开的IE实例
    Global $oIE2 = _IEAttach($oIE, "url")

    ; 模拟点击按钮
    Local $oButton = _IEGetObjByName($oIE2, "start_learning_button")
    _IEAction($oButton, "click")
EndIf
发表于 2023-4-28 18:13:50 | 显示全部楼层
itzyx 发表于 2023-4-28 16:37
可以试试使用_IEAttach()函数来打开已经加载并显示的页面,而不是重新加载页面。

竟然能看懂题意,厉害额
发表于 2023-4-28 20:34:59 | 显示全部楼层
2楼那个等待浏览器加载完毕,应该关键,楼主估计是没有正确判断浏览器是否加载完毕。
发表于 2023-4-28 22:41:17 | 显示全部楼层
现在很多网站已经不支持IE内核的浏览器了,如果需要模拟用户交互。
需要使用Selenium WebDriver来操作Chrome内核的浏览器。
可以访问页面的元素和模拟点击。
 楼主| 发表于 2023-5-4 13:15:02 | 显示全部楼层
haijie1223 发表于 2023-4-28 20:34
2楼那个等待浏览器加载完毕,应该关键,楼主估计是没有正确判断浏览器是否加载完毕。

_IECreate(),本身有参数$f_wait,(默认) 在返回之前等待网页加载完毕。我目前已经使用其他方式解决。
 楼主| 发表于 2023-5-4 13:32:36 | 显示全部楼层
itzyx 发表于 2023-4-28 16:37
可以试试使用_IEAttach()函数来打开已经加载并显示的页面,而不是重新加载页面。

谢谢提供思路。这个代码仍然是重载一次,鼠标点击代码运行要快过网页第二次加载速度,导致鼠标点击完毕,页面又刷新出来,那个"开始学习"div层没有点击成功。我使用_IENavigate($oIE, $aArray[3])   ;$aArray[3]为网址参数,直接在一个存在的浏览器窗口打开指定课程,默认参数也是等待加载完毕。实际上在网站加载速度较快情况下,用什么代码都无所谓,sleep()几秒就OK了。目前已经实现读取excle内课程信息(序号、标题、时长、网址,从源代码中获取),修改配置文件(含课程序号、课程数、鼠标点击坐标信息),播放对应时长后,自动关闭浏览器,打开学习下一课。
 楼主| 发表于 2023-5-4 13:41:19 | 显示全部楼层
针对不同电脑分辨率、浏览器不同,鼠标点击位置不同,又编写个获取点击位置的程序,手动写入配置文件。挂课学习代码如下,有点冗余,基本实现要求。
#include <Excel.au3>
#include <Array.au3>
#include <File.au3>
#include <IE.au3>

_main()
Exit

Func _main()
        _xunhuan()
EndFunc
        
Func _bofang()
;获取配置文件中序号对应的课程信息,并写入数组
Local $Dir1 = StringLeft(@AutoItExe,StringInStr(@AutoItExe,"",0,-1)) ;程序所在目录
;MsgBox(64,"",$dir1) ;测试目录是否正确
Local $oExcel = _ExcelBookOpen($Dir1&"学习课程列表.xls")
Local $Num = IniRead($Dir1&"配置.ini","setting","n",1)  ;读取配置文档
Local $aArray = _ExcelReadArray($oExcel, $Num + 1, 1, 4) ;方向是垂直的
;_ArrayDisplay($aArray, "Horizontal") ;测试数组内容

If IniRead($Dir1&"配置.ini", "setting","m","1") = "" Then
For $i = 1 To 100 ;循环
    $sCellValue = _ExcelReadCell($oExcel, $i+1, 1)
        If IsNumber($sCellValue) = 0 Then
                ExitLoop
        EndIf
Next
   Local $Max_Num = _ExcelReadCell($oExcel, $i, 1)
   $pz = IniWrite($Dir1&"配置.ini", "setting","m",$Max_Num)
EndIf

$pz = IniWrite($Dir1&"配置.ini", "setting","n",$Num+1)
Local $x = IniRead($Dir1&"配置.ini","mouse","x",1)  ;读取配置文档
Local $y = IniRead($Dir1&"配置.ini","mouse","y",1)  ;读取配置文档
_ExcelBookClose($oExcel)


;再重新打开默认浏览器,原浏览器窗口保持网站登陆状态
Local $var = RegRead("HKEY_CLASSES_ROOT\http\shell\open\command", "") ;读取默认浏览器建值
Local $result = StringInStr($var, ".exe")  ;获取字符串中.exe所在位置
Local $dir2 =  StringMid($var, 2, $result + 2)  ;截取字符串,获取默认浏览器路径
;MsgBox(4096, "Program files are in:", $dir)  ;检查默认浏览器路径是否正确
ShellExecuteWait($dir2,"","","",@SW_MAXIMIZE)  ;最大化打开浏览器,不加载指定网站,最大化不好使

;打开指定课程,等待加载完毕
Local $oIE = _IECreate("about:blank", 1,1,1,0)
WinActivate("about:blank","")  ;激活窗口
WinSetState("about:blank","",@SW_MAXIMIZE)  ;将激活窗口最大化,解决上面最大化失败问题
_IENavigate($oIE, $aArray[3])   ;直接在一个存在的浏览器窗口打开指定课程,等待加载完毕
sleep(1000) ;延时1秒钟
;MouseClick("left",950,480)  ;占击开始学习,位置信息可升级编写脚本
WinActivate($aArray[1],"")  ;激活窗口
MouseClick("left",$x,$y)  ;占击开始学习,位置信息可升级编写脚本

;程序暂停运行时间为课程时长加1分钟,之后关闭此浏览器窗口
;Sleep(60000*($aArray[2]+1))  ;延时分钟数加1
For $i = $aArray[2]+1 To 0 Step -1
        If $i = 0 Then
                Sleep(1000)
        ;MsgBox(4096, "窗口名称",$aArray[1],10)
        WinClose ($aArray[1])
        Else
                TrayTip("倒计时","剩余"&$i&"分钟",10,1)
                Sleep(60000)
        EndIf
Next
EndFunc ;==>_bofang

Func _xunhuan()
        Local $Dir1 = StringLeft(@AutoItExe,StringInStr(@AutoItExe,"",0,-1)) ;程序所在目录
    Local $m = IniRead($Dir1&"配置.ini","setting","m",1)  ;读取配置文档
    Local $n = IniRead($Dir1&"配置.ini","setting","n",1)
        Local $i = $n
    While $i <= $m
                $i = $i + 1
                _bofang()
    WEnd
EndFunc ;==>_xunhuan

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-26 15:44 , Processed in 0.076870 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表