找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 17539|回复: 1

[原创教程] powershell基于selenium控制edge浏览器

[复制链接]
发表于 2022-5-18 20:51:50 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码

评分

参与人数 2技术 +2 收起 理由
buyiyang + 1 感谢分享
flashercs + 1 感谢分享

查看全部评分

 楼主| 发表于 2022-5-18 21:00:35 | 显示全部楼层
win10自带edge,以此为例子,其它支持的浏览器都是一套api
win11阉割了ie,自动化目前就先用selenium,能实现大部分浏览器操作
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 21:22 , Processed in 0.009699 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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