[已解决]怎样实现_IECreate()使用360浏览器打开网址后不再重新加载?
本帖最后由 lanfengshijiu 于 2023-5-4 14:35 编辑au3编挂课程序,打开指定学习网址加载成功后,模拟鼠标点击“开始学习”后自动学习视频,目前 _IECreate()用360浏览器打开网址加载成功后又重新加载一次,导致原计划加载成功后模拟点击鼠标无作用了。由于网址打开慢,未使用ShellExecuteWait命令,想判断加载成功后再模拟点击鼠标。各位大神,怎样实现_IECreate()打开网址后不再重新加载? 可以试试使用_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
itzyx 发表于 2023-4-28 16:37
可以试试使用_IEAttach()函数来打开已经加载并显示的页面,而不是重新加载页面。
竟然能看懂题意,厉害额 2楼那个等待浏览器加载完毕,应该关键,楼主估计是没有正确判断浏览器是否加载完毕。 现在很多网站已经不支持IE内核的浏览器了,如果需要模拟用户交互。
需要使用Selenium WebDriver来操作Chrome内核的浏览器。
可以访问页面的元素和模拟点击。 haijie1223 发表于 2023-4-28 20:34
2楼那个等待浏览器加载完毕,应该关键,楼主估计是没有正确判断浏览器是否加载完毕。
_IECreate(),本身有参数$f_wait,(默认) 在返回之前等待网页加载完毕。我目前已经使用其他方式解决。 itzyx 发表于 2023-4-28 16:37
可以试试使用_IEAttach()函数来打开已经加载并显示的页面,而不是重新加载页面。
谢谢提供思路。这个代码仍然是重载一次,鼠标点击代码运行要快过网页第二次加载速度,导致鼠标点击完毕,页面又刷新出来,那个"开始学习"div层没有点击成功。我使用_IENavigate($oIE, $aArray) ;$aArray为网址参数,直接在一个存在的浏览器窗口打开指定课程,默认参数也是等待加载完毕。实际上在网站加载速度较快情况下,用什么代码都无所谓,sleep()几秒就OK了。目前已经实现读取excle内课程信息(序号、标题、时长、网址,从源代码中获取),修改配置文件(含课程序号、课程数、鼠标点击坐标信息),播放对应时长后,自动关闭浏览器,打开学习下一课。 针对不同电脑分辨率、浏览器不同,鼠标点击位置不同,又编写个获取点击位置的程序,手动写入配置文件。挂课学习代码如下,有点冗余,基本实现要求。#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) ;直接在一个存在的浏览器窗口打开指定课程,等待加载完毕
sleep(1000) ;延时1秒钟
;MouseClick("left",950,480);占击开始学习,位置信息可升级编写脚本
WinActivate($aArray,"");激活窗口
MouseClick("left",$x,$y);占击开始学习,位置信息可升级编写脚本
;程序暂停运行时间为课程时长加1分钟,之后关闭此浏览器窗口
;Sleep(60000*($aArray+1));延时分钟数加1
For $i = $aArray+1 To 0 Step -1
If $i = 0 Then
Sleep(1000)
;MsgBox(4096, "窗口名称",$aArray,10)
WinClose ($aArray)
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
页:
[1]