Board logo

标题: [原创教程] powershell基于selenium控制edge浏览器 [打印本页]

作者: went    时间: 2022-5-18 20:51     标题: powershell基于selenium控制edge浏览器

本帖最后由 went 于 2022-5-18 21:05 编辑

windows版本win10及以上
selenium使用官网最新api,旧版本自行查询

准备工作,下载selenium库文件和edge驱动程序
  1. 核心版本需要以下文件
  2. msedgedriver.exe
  3. WebDriver.dll
复制代码
上面两个文件下载链接自动获取
手动下载edge驱动和selenium库.bat
  1. #&cls&@cd /d "%~dp0"&powershell -c "Get-Content '%~0' | Out-String | Invoke-Expression" & pause&exit
  2. cls
  3. $whr = New-Object -ComObject 'WinHttp.WinHttpRequest.5.1'
  4. #获取edge驱动链接
  5. $edge_exe = 'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe'
  6. if(![System.IO.File]::Exists($edge_exe)){ Write-Host 'edge未安装' -ForegroundColor Red; exit }
  7. $edge_ver = ([System.Diagnostics.FileVersionInfo]::GetVersionInfo($edge_exe)).ProductVersion
  8. $url1 = 'https://msedgedriver.azureedge.net/{0}/edgedriver_win32.zip' -f $edge_ver
  9. #获取selenium下载链接
  10. $whr.Open('GET','https://www.nuget.org/packages/Selenium.WebDriver/',$false)
  11. $whr.Send()
  12. if($whr.ResponseText -match '(?m)^\s*<a href="(.*?)".*?>Download package</a>\s*$'){ $url2 = $Matches[1] }
  13. #输出信息
  14. @'
  15. 下载以下对应文件并解压
  16. msedgedriver.exe  ->  {0}
  17. WebDriver.dll     ->  {1}
  18. '@ -f $url1,$url2
复制代码
测试文件结构如下
  1. selenium_sample.bat
  2. msedgedriver.exe
  3. WebDriver.dll
复制代码
基础测试代码
selenium_sample.bat
  1. #&cls&@cd /d "%~dp0"&powershell -c "Get-Content '%~0' | Out-String | Invoke-Expression" & pause&exit
  2. using namespace 'OpenQA.Selenium'
  3. '加载驱动'
  4. Get-ChildItem '*.dll' | foreach {[void][System.Reflection.Assembly]::LoadFile($_.FullName)}
  5. '实例化'
  6. $edge = [Edge.EdgeDriver]::new()
  7. '访问URL - 百度首页'
  8. $edge.Url = 'https://www.baidu.com'
  9. '输入搜索关键字'
  10. $edge.FindElement([By]::Id('kw')).SendKeys('selenium')
  11. '点击百度一下'
  12. $edge.FindElement([by]::Id('su')).Click()
  13. '3s后弹出对话框'
  14. Start-Sleep -Seconds 3
  15. '执行JavaScript,弹出窗口'
  16. $edge.ExecuteScript('alert("powershell edge 自动化控制!")')
  17. '获取edge跳转对象'
  18. $st = $edge.SwitchTo()
  19. '3s后关闭对话框'
  20. Start-Sleep -Seconds 3
  21. '跳转到弹出窗口,点击确定'
  22. $st.Alert().Accept()
  23. '执行JavaScript打开新窗口(新标签页) - 百度翻译'
  24. $edge.ExecuteScript('window.open("https://fanyi.baidu.com")')
  25. '跳转到百度翻译窗口'
  26. [void]$st.Window($edge.WindowHandles[1])
  27. '关闭百度翻译的遮罩层'
  28. $edge.FindElement([By]::CssSelector('a[class=desktop-guide-close]')).Click()
  29. '输入要查询的单词 hello'
  30. $edge.FindElement([by]::Id('baidu_translate_input')).SendKeys('hello')
  31. '点击翻译'
  32. $edge.FindElement([by]::Id('translate-button')).Click()
  33. '跳转iframe 根据name或id'
  34. [void]$st.Frame('doc-view-iframe')
  35. '操作iframe元素'
  36. $edge.FindElement([by]::TagName('head')).Text
  37. '跳转回默认frame'
  38. [void]$st.DefaultContent()
  39. '测试点击翻译'
  40. $edge.FindElement([by]::Id('translate-button')).Click()
  41. '翻译 hello'
  42. '获取翻译结果'
  43. $edge.FindElement([by]::Id('left-result-container')).Text
  44. '关闭当前窗口 - 百度翻译'
  45. $edge.Close()
  46. '跳转回主窗口 - 百度一下'
  47. [void]$st.Window($edge.WindowHandles[0])
  48. '测试百度一下按钮'
  49. $edge.FindElement([by]::Id('su')).Click()
  50. 10..1 | foreach {
  51.     Write-Host "${_}后关闭浏览器"
  52.     Start-Sleep -Seconds 1
  53. }
  54. '关闭当前窗口'
  55. $edge.Close()
  56. '释放资源'
  57. $edge.Dispose()
  58. pause
复制代码

作者: went    时间: 2022-5-18 21:00

win10自带edge,以此为例子,其它支持的浏览器都是一套api
win11阉割了ie,自动化目前就先用selenium,能实现大部分浏览器操作




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2