当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

作者:精品下载站 日期:2024-12-14 13:02:34 浏览:13 分类:玩电脑

为 Web 自动化增强 Selenium 和 PowerShell


必须一遍又一遍地键入和单击内容才能完成工作并不有趣。以网站监控和测试为例。您执行许多重复操作,例如单击按钮和链接、登录、运行搜索以及单击更多操作。好在有 SeleniumPowerShell

Selenium 是一个免费的开源框架,用于自动化 Web 浏览器测试。由于 Selenium 是可移植的,并且它支持多种语言,因此可以与 PowerShell 一起使用。

在本文中,您将了解如何开始使用 Selenium 和 PowerShell 这两个优秀工具的令人难以置信的组合,在 Web 浏览器上自动执行与 Web 相关的任务。您将学习如何以编程方式执行操作,例如导航、记录、搜索、单击和发送输入。

在本文结束时,您将创建一个执行以下操作的 PowerShell 脚本:

  • 启动 Google Chrome 实例。
  • 导航至 PowerShell.org。
  • 输入用户名+密码。 (登录)
  • 执行文章搜索。
  • 单击结果中的第二篇文章。

如果您仍然感兴趣,请准备好学习并继续阅读。

先决条件

在继续之前,您需要满足一些要求才能遵循示例。

  • 您需要一台至少运行 Windows 10 的计算机。
  • 您的计算机必须安装Windows PowerShell 5.1PowerShell 7.0.3
  • 您的计算机上必须安装代码编辑器。在本文中,您将看到使用 Visual Studio Code。请随意使用您熟悉的代码编辑器。
  • 您的计算机必须安装Google Chrome浏览器。
  • 适合您的 Google Chrome 版本的 ChromeDriver 版本。

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

  • Selenium Web 驱动程序的最新稳定版本。在撰写本文时,最新版本是 3.14.0。转到下载页面并下载 C# 的网络驱动程序。

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

请注意,下载 Selenium WebDriver zip 文件后,您将专门查找 WebDriver.dll 文件。

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

  • 为您的脚本创建一个工作目录,例如c:\selenium。
  • 确保将文件 chromedriver.exeWebDriver.dll 提取到您的工作目录。
  • 在工作目录中创建一个名为 run.ps1 的新 PowerShell 脚本文件。下图显示了工作目录中应包含的文件。

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

让 Selenium 和 PowerShell 发挥作用

Selenium 和 PowerShell 的工作需要两件事:

  • WebDriver.dll 必须导入到 PowerShell 会话中。
  • ChromeDriver.exe 可以从系统路径或用户路径调用。

在本节中,您将学习如何确保满足这些条件。

在用户路径中添加 ChromeDriver 位置

根据ChromeDriver官方文档,ChromeDriver.exe位置必须位于Path环境变量中才能正常工作。您可以使用 Selenium WebDriver 的系统或用户 Path 环境变量来识别该位置。

以下命令会将文件夹位置 c:\selenium 添加到当前 PowerShell 会话的用户路径。

# Your working directory
$workingPath = 'C:\selenium'

# Add the working directory to the environment path.
# This is required for the ChromeDriver to work.
if (($env:Path -split ';') -notcontains $workingPath) {
    $env:Path += ";$workingPath"
}

在 PowerShell 会话中运行上述命令后,通过运行以下命令确认 c:\selenium 位置已添加到环境路径中。

# Check the Path environment variable
$env:Path -split ';'

下图显示 c:\selenium 位置现在出现在环境路径中。

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

将 Selenium 导入 PowerShell

接下来,要将 WebDriver.dll(类)导入到当前 PowerShell 会话中,您可以使用以下任意命令。请注意,您只需选择一项即可。第一个命令应该是您所需要的,但请使用您最喜欢的命令。结果是一样的。

# OPTION 1: Import Selenium to PowerShell using the Add-Type cmdlet.
Add-Type -Path "$($workingPath)\WebDriver.dll"

# OPTION 2: Import Selenium to PowerShell using the Import-Module cmdlet.
Import-Module "$($workingPath)\WebDriver.dll"

# OPTION 3: Import Selenium to PowerShell using the .NET assembly class.
[System.Reflection.Assembly]::LoadFrom("$($workingPath)\WebDriver.dll")

创建新的浏览器实例

现在您已在 PowerShell 会话中导入 Selenium WebDriver,现在可以创建 ChromeDriver 的新实例。然后,使用该实例启动浏览器并导航到 URL。

如果采用 $ChromeDriver 变量的形式,以下命令将创建新的 ChromeDriver 实例。

# Create a new ChromeDriver Object instance.
$ChromeDriver = New-Object OpenQA.Selenium.Chrome.ChromeDriver

接下来,下面的命令将启动浏览器窗口并导航到指定的 URL。

# Launch a browser and go to URL
$ChromeDriver.Navigate().GoToURL('<https://powershell.org/profile/login/>')

在 PowerShell 会话中运行上述代码后,将启动一个新的浏览器窗口并自动加载 URL。

从下面的屏幕截图中可以看到,地址栏下方的通知文本显示“Chrome 正在由自动化测试软件控制”,这意味着该浏览器实例是由网络驱动程序创建的。

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

检查页面上的元素

元素基本上指的是加载的网页上的所有内容。这些元素可以是按钮、输入框和链接。在以编程方式与任何元素交互之前,您首先需要找到该元素。

现代浏览器(例如 Chrome)包含内置的开发人员工具。该开发人员工具可用于检查页面上的元素并获取该元素所需的属性。

例如,网页显示带有用户名、密码和登录按钮的登录表单。要检查这些元素,请按键盘上的 CTRL+SHIFT+I 以在右侧显示开发工具窗格。或者,单击右上角的菜单按钮,单击更多工具 —> 开发人员工具

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

显示开发人员工具窗格后,右键单击要检查的元素。在此示例中,右键单击用户名输入框,然后单击检查

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

然后,右键单击突出显示的元素代码,然后单击复制 —> 复制 XPath

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

现在您已经复制了 XPath 值,请确保将其保存在记录中。然后,重复相同的过程并复制密码框和登录按钮的 XPath。您应该拥有这三个元素的 XPath 记录,类似于下面的记录。

# Username Box XPath: //*[@id="username_or_email-731"]
# Password Box XPath: //*[@id="user_pass-731"]
# Login Button XPath: //*[@id="post-115080"]/div/div/div/div[2]/form/div[7]/input

通过XPath、发送按键、点击等方式定位目标元素

现在您已经有了用户名框、密码框和登录按钮的 XPath,请使用下面的代码来发出每个元素的命令。确保更改 FindElementByXPath() 内的 XPath 值。另外,分别使用您的用户名和密码更改前两行代码的 SendKeys() 值。

# Enter the username in the Username box
$ChromeDriver.FindElementByXPath('//*[@id="username_or_email-731"]').SendKeys('YOUR USERNAME HERE')

# Enter the password in the Password box
$ChromeDriver.FindElementByXPath('//*[@id="user_pass-731"]').SendKeys('YOUR PASSWORD HERE')

# Click on the Login button
$ChromeDriver.FindElementByXPath('//*[@id="post-115080"]/div/div/div/div[2]/form/div[7]/input').Click()

将 XPath、用户名和密码值替换为代码后,在 PowerShell 中一次运行一行。正如您从下面的演示中看到的,代码以编程方式输入用户名和密码,然后单击“登录”按钮。

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

接下来,获取左侧SEARCH菜单的XPath。

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

获取 XPath 后,替换下面代码中的 FindElementByXPath() 值。然后,在 PowerShell 中运行代码。

# Click on the SEARCH menu item
$ChromeDriver.FindElementByXPath('//*[@id="menu-item-194315"]/a/span').Click()

下面的演示显示使用 Selenium PowerShell 命令单击SEARCH菜单链接。

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

提交输入数据

现在您位于搜索页面,下一步是通过提交关键字搜索来执行文章搜索。但首先,您需要获取搜索...框的XPath。

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

当您拥有搜索框的 XPath 时,使用下面的代码在框中输入关键字“SharePoint”并提交搜索。确保替换 FindElementByXPath() 值。

# Enter the keyword to search
$ChromeDriver.FindElementByXPath('//*[@id="s"]').SendKeys('Sharepoint')

# Submit the search
$ChromeDriver.FindElementByXPath('//*[@id="s"]').Submit()

在 PowerShell 中运行上述命令,就会执行搜索,类似于下面的演示。

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

通过标签定位目标元素并发送点击

上一节中,提交了搜索,并返回了结果。下一步是运行代码以单击第二个搜索结果。由于您现在根据搜索结果的显示顺序动态选择元素,因此使用 XPath 不适用。

其中一种适用的技术是通过使用元素的TagName来定位元素。在下面的示例中,您可以看到标签名称为 article。由于有多个搜索结果,因此会有多个带有 article 标签名称的元素。

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

文章中,您应该寻找的是超链接。超链接使用标记名a。一篇文章下可能有多个超链接或a标记名。在上面的示例中,文章的超链接是第一个 a 标记名。

如果您想通过单击搜索结果中的第一个超链接来打开第二个搜索结果,则需要使用索引来识别要单击的链接。

下面的代码执行以下操作:

  • 使用标签名称“article”找到第二个元素。索引=[1]
  • 使用“article”下的标签名称“a”找到第一个元素。索引=[0]
  • 单击链接加载文章。

注意:索引是从零开始的。这意味着索引 [0] 是第一个,索引 [1] 是第二个,依此类推。

# Find the second search result and click the link
$ChromeDriver.FindElementsByTagName('article')[1].FindElementsByTagName('a')[0].Click()

当您在 PowerShell 中运行代码时,下面是预期结果的演示。

[玩转系统] 为 Web 自动化增强 Selenium 和 PowerShell

打扫干净

自动化完成工作后,执行 Selenium 清理至关重要,其中包括删除临时文件和终止浏览器进程。您不需要手动执行清理。您需要做的就是运行下面这些行。请注意,此步骤不是必需的,但建议执行。

$ChromeDriver.Close()
$ChromeDriver.Quit()

整理你的代码

根据您完成的所有步骤和测试,下面是您可以保存在 run.ps1 脚本中的结果代码。

# Your working directory
$workingPath = 'C:\selenium'

# Add the working directory to the environment path.
# This is required for the ChromeDriver to work.
if (($env:Path -split ';') -notcontains $workingPath) {
    $env:Path += ";$workingPath"
}

# OPTION 1: Import Selenium to PowerShell using the Add-Type cmdlet.
Add-Type -Path "$($workingPath)\WebDriver.dll"

# Create a new ChromeDriver Object instance.
$ChromeDriver = New-Object OpenQA.Selenium.Chrome.ChromeDriver

# Launch a browser and go to URL
$ChromeDriver.Navigate().GoToURL('<https://powershell.org/profile/login/>')

# Enter the username in the Username box
$ChromeDriver.FindElementByXPath('//*[@id="username_or_email-731"]').SendKeys('YOUR USERNAME HERE')

# Enter the password in the Password box
$ChromeDriver.FindElementByXPath('//*[@id="user_pass-731"]').SendKeys('YOUR PASSWORD HERE')

# Click on the Login button
$ChromeDriver.FindElementByXPath('//*[@id="post-115080"]/div/div/div/div[2]/form/div[7]/input').Click()

# Click on the SEARCH menu item
$ChromeDriver.FindElementByXPath('//*[@id="menu-item-194315"]/a/span').Click()

# Enter the keyword to search
$ChromeDriver.FindElementByXPath('//*[@id="s"]').SendKeys('Sharepoint')

# Submit the search
$ChromeDriver.FindElementByXPath('//*[@id="s"]').Submit()

# Find the second search result and click the link
$ChromeDriver.FindElementsByTagName('article')[1].FindElementsByTagName('a')[0].Click()

# Cleanup
$ChromeDriver.Close()
$ChromeDriver.Quit()

概括

Selenium 和 PowerShell 是用于基于浏览器的自动化的强大组合。使用 Selenium 和 PowerShell,您可以自动执行可重复的任务并编写可重复使用的脚本。

在本文中,您学习了如何开始使用 Selenium 和 PowerShell 实现基于浏览器的 Web 自动化。您已经学习了如何检查页面上的元素、定位元素以及以编程方式将操作发送到 Web 浏览器以执行目标任务。

我希望本文能够帮助您了解 Selenium 以及它与 PowerShell 一起使用来创建自动化脚本时的功能。也许一个很好的后续学习是尝试制作一个将文件下载或上传到网站的脚本。

进一步阅读

  • 适合初学者的 Python Web 自动化
  • HTML 元素参考 - 按类别
  • Selenium - 入门
  • 什么是 XPath?
  • 升级到 PowerShell 7:演练

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯