标题: [原创教程] powershell基于selenium控制edge浏览器 [打印本页]
作者: went 时间: 2022-5-18 20:51 标题: powershell基于selenium控制edge浏览器
本帖最后由 went 于 2022-5-18 21:05 编辑
windows版本win10及以上
selenium使用官网最新api,旧版本自行查询
准备工作,下载selenium库文件和edge驱动程序- 核心版本需要以下文件
- msedgedriver.exe
- WebDriver.dll
复制代码
上面两个文件下载链接自动获取
手动下载edge驱动和selenium库.bat- #&cls&@cd /d "%~dp0"&powershell -c "Get-Content '%~0' | Out-String | Invoke-Expression" & pause&exit
- cls
- $whr = New-Object -ComObject 'WinHttp.WinHttpRequest.5.1'
- #获取edge驱动链接
- $edge_exe = 'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe'
- if(![System.IO.File]::Exists($edge_exe)){ Write-Host 'edge未安装' -ForegroundColor Red; exit }
- $edge_ver = ([System.Diagnostics.FileVersionInfo]::GetVersionInfo($edge_exe)).ProductVersion
- $url1 = 'https://msedgedriver.azureedge.net/{0}/edgedriver_win32.zip' -f $edge_ver
- #获取selenium下载链接
- $whr.Open('GET','https://www.nuget.org/packages/Selenium.WebDriver/',$false)
- $whr.Send()
- if($whr.ResponseText -match '(?m)^\s*<a href="(.*?)".*?>Download package</a>\s*$'){ $url2 = $Matches[1] }
- #输出信息
- @'
- 下载以下对应文件并解压
- msedgedriver.exe -> {0}
- WebDriver.dll -> {1}
- '@ -f $url1,$url2
复制代码
测试文件结构如下- selenium_sample.bat
- msedgedriver.exe
- WebDriver.dll
复制代码
基础测试代码
selenium_sample.bat- #&cls&@cd /d "%~dp0"&powershell -c "Get-Content '%~0' | Out-String | Invoke-Expression" & pause&exit
- using namespace 'OpenQA.Selenium'
-
- '加载驱动'
- Get-ChildItem '*.dll' | foreach {[void][System.Reflection.Assembly]::LoadFile($_.FullName)}
-
- '实例化'
- $edge = [Edge.EdgeDriver]::new()
-
- '访问URL - 百度首页'
- $edge.Url = 'https://www.baidu.com'
-
- '输入搜索关键字'
- $edge.FindElement([By]::Id('kw')).SendKeys('selenium')
-
- '点击百度一下'
- $edge.FindElement([by]::Id('su')).Click()
-
- '3s后弹出对话框'
- Start-Sleep -Seconds 3
-
- '执行JavaScript,弹出窗口'
- $edge.ExecuteScript('alert("powershell edge 自动化控制!")')
-
- '获取edge跳转对象'
- $st = $edge.SwitchTo()
-
- '3s后关闭对话框'
- Start-Sleep -Seconds 3
-
- '跳转到弹出窗口,点击确定'
- $st.Alert().Accept()
-
- '执行JavaScript打开新窗口(新标签页) - 百度翻译'
- $edge.ExecuteScript('window.open("https://fanyi.baidu.com")')
-
-
- '跳转到百度翻译窗口'
- [void]$st.Window($edge.WindowHandles[1])
-
- '关闭百度翻译的遮罩层'
- $edge.FindElement([By]::CssSelector('a[class=desktop-guide-close]')).Click()
-
- '输入要查询的单词 hello'
- $edge.FindElement([by]::Id('baidu_translate_input')).SendKeys('hello')
-
- '点击翻译'
- $edge.FindElement([by]::Id('translate-button')).Click()
-
- '跳转iframe 根据name或id'
- [void]$st.Frame('doc-view-iframe')
-
- '操作iframe元素'
- $edge.FindElement([by]::TagName('head')).Text
-
- '跳转回默认frame'
- [void]$st.DefaultContent()
-
- '测试点击翻译'
- $edge.FindElement([by]::Id('translate-button')).Click()
-
- '翻译 hello'
- '获取翻译结果'
- $edge.FindElement([by]::Id('left-result-container')).Text
-
- '关闭当前窗口 - 百度翻译'
- $edge.Close()
-
- '跳转回主窗口 - 百度一下'
- [void]$st.Window($edge.WindowHandles[0])
-
- '测试百度一下按钮'
- $edge.FindElement([by]::Id('su')).Click()
-
- 10..1 | foreach {
- Write-Host "${_}后关闭浏览器"
- Start-Sleep -Seconds 1
- }
-
- '关闭当前窗口'
- $edge.Close()
-
- '释放资源'
- $edge.Dispose()
-
- pause
复制代码
作者: went 时间: 2022-5-18 21:00
win10自带edge,以此为例子,其它支持的浏览器都是一套api
win11阉割了ie,自动化目前就先用selenium,能实现大部分浏览器操作
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |