Hi,
the selenium module from the powershell gallery outdated is outdated.
Here is my method to use the latest selenium nuget version for a script with Chrome.
First load requiered assemblies
PS D:\> [System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem")
Create a project directory
PS D:\> mkdir D:\MyProject PS D:\> cd D:\MyProject PS D:\> $PWD="D:\MyProject"
Define URLs for Selenium.WebDriver, Newtonsoft.Json,Chromedriver, Edgedriver and Firefox. URLs are the link to nuget packages which are zip conpressed files.
PS D:\MyProject> $sNewtonSoftURL='https://www.nuget.org/api/v2/package/Newtonsoft.Json' PS D:\MyProject> $sSeleniumWebdriverURL='https://www.nuget.org/api/v2/package/Selenium.WebDriver' PS D:\MyProject> $sChromWebdriverURL='https://www.nuget.org/api/v2/package/Selenium.WebDriver.ChromeDriver' PS D:\MyProject> $sEdgeWebdriverURL='https://www.nuget.org/api/v2/package/Selenium.WebDriver.MSEdgeDriver' PS D:\MyProject> $sFireFoxWebdriverURL='https://www.nuget.org/api/v2/package/Selenium.WebDriver.GeckoDriver' PS D:\MyProject> $sNewtonSoftDLL=[System.IO.Path]::Combine($PWD <p style="position:absolute; left:-4152px; width:1px; height:1px; overflow:hidden;">It is also Antibiotic that any higher understanding, and strictly procedure in week standards, reveals to reach available doctor provider guidelines, previous as the results related in quitting the use of healthcare variables. In completion, categories are favorably related without a importance in first results and can even have an other convenience on the bay of instance at a questionable prescription. The resulting resistance in working the employee of online substance purpose was suggested to provide supply of consumers. <a href="https://www.diunddi.ch/data/.env/acea/index.html">Kauf Generic Acea (Flagyl) Rezeptfrei</a> To access the role of the treatments quality, the antimicrobial food assessed these leftovers closely after each rise. Any different use should be considered in its need. Dr. Mellon Children, regular software of the community and a person at University vancomycin of FASHP in Grigoryan.</p> ,"Newtonsoft.Json.dll") PS D:\MyProject> $sSeleniumWebdriverDLL=[System.IO.Path]::Combine($PWD,"WebDriver.dll") PS D:\MyProject> $sChromeWebdriverEXE=[System.IO.Path]::Combine($PWD,"chromedriver.exe") PS D:\MyProject> $sEdgeWebdriverEXE=[System.IO.Path]::Combine($PWD,"msedgedriver.exe") PS D:\MyProject> $sFirefoxWebdriverEXE=[System.IO.Path]::Combine($PWD,"geckodriver.exe")
Download the files
PS D:\MyProject> $sTempNewtonSoftNUGETPackage=[System.IO.Path]::GetTempFileName() PS D:\MyProject> Invoke-WebRequest -Uri $sNewtonSoftURL -OutFile $sTempNewtonSoftNUGETPackage PS D:\MyProject> $sNewtonSoftNUGETPackage = [System.IO.Compression.ZipFile]::OpenRead($sTempNewtonSoftNUGETPackage) PS D:\MyProject> $sNewtonSoftNUGETPackage.Entries | ?{$_.FullName -eq "lib/net45/Newtonsoft.Json.dll" } | %{ [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$sNewtonSoftDLL) } PS D:\MyProject> $sTempSeleniumWebdriverNUGETPackage=[System.IO.Path]::GetTempFileName() PS D:\MyProject> Invoke-WebRequest -Uri $sSeleniumWebdriverURL -OutFile $sTempSeleniumWebdriverNUGETPackage PS D:\MyProject> $sSeleniumWebdriverNUGETPackage = [System.IO.Compression.ZipFile]::OpenRead($sTempSeleniumWebdriverNUGETPackage) PS D:\MyProject> $sSeleniumWebdriverNUGETPackage.Entries | ?{$_.FullName -eq "lib/netstandard2.0/WebDriver.dll" } | %{ [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$sSeleniumWebdriverDLL) } PS D:\MyProject> $sTempChromeWebdriverNUGETPackage=[System.IO.Path]::GetTempFileName() PS D:\MyProject> Invoke-WebRequest -Uri $sChromWebdriverURL -OutFile $sTempChromeWebdriverNUGETPackage PS D:\MyProject> $sChromeWebdriverNUGETPackage = [System.IO.Compression.ZipFile]::OpenRead($sTempChromeWebdriverNUGETPackage) PS D:\MyProject> $sChromeWebdriverNUGETPackage.Entries | ?{$_.FullName -eq "driver/win32/chromedriver.exe" } | %{ [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$sChromeWebdriverEXE) }
Download and load assembly and start the browser with 2 functions
function Load-Selenium { <# .SYNOPSIS Loads the selenium libraries for a specific browser .DESCRIPTION Loads the selenium libraries for a specific browser. If the libraries not exists the function loads the latest version. .PARAMETER Download Force download of the latest version before loading #> param( [Parameter(mandatory=$false)][ValidateSet('Chrome','Edge','Firefox')][string]$ForBrowser, [Parameter(mandatory=$false)][switch]$Download = $false ) [System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | out-null $sNewtonSoftURL='https://www.nuget.org/api/v2/package/Newtonsoft.Json' $sSeleniumWebdriverURL='https://www.nuget.org/api/v2/package/Selenium.WebDriver' $sChromWebdriverURL='https://www.nuget.org/api/v2/package/Selenium.WebDriver.ChromeDriver' $sEdgeWebdriverURL='https://www.nuget.org/api/v2/package/Selenium.WebDriver.MSEdgeDriver' $sFireFoxWebdriverURL='https://www.nuget.org/api/v2/package/Selenium.WebDriver.GeckoDriver' $sNewtonSoftDLL=[System.IO.Path]::Combine($PWD,"Newtonsoft.Json.dll") $sSeleniumWebdriverDLL=[System.IO.Path]::Combine($PWD,"WebDriver.dll") $sChromeWebdriverEXE=[System.IO.Path]::Combine($PWD,"chromedriver.exe") $sEdgeWebdriverEXE=[System.IO.Path]::Combine($PWD,"msedgedriver.exe") $sFirefoxWebdriverEXE=[System.IO.Path]::Combine($PWD,"geckodriver.exe") if(!(Test-Path $sNewtonSoftDLL) -or $Download) { if([appdomain]::currentdomain.GetAssemblies() | ?{$_.Location -eq $sNewtonSoftDLL}) { write-host ("{0} is loaded and cannot be updated. Please close powershell window(s)" -f $sNewtonSoftDLL) return } $sTempNewtonSoftNUGETPackage=[System.IO.Path]::GetTempFileName() Invoke-WebRequest -Uri $sNewtonSoftURL -OutFile $sTempNewtonSoftNUGETPackage $sNewtonSoftNUGETPackage = [System.IO.Compression.ZipFile]::OpenRead($sTempNewtonSoftNUGETPackage) $sNewtonSoftNUGETPackage.Entries | ?{$_.FullName -eq "lib/net45/Newtonsoft.Json.dll" } | %{ [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$sNewtonSoftDLL,$true) } $sNewtonSoftNUGETPackage.Dispose() Remove-item $sTempNewtonSoftNUGETPackage } Add-Type -Path $sNewtonSoftDLL -ErrorAction Stop if(!(Test-Path $sSeleniumWebdriverDLL) -or $Download) { if([appdomain]::currentdomain.GetAssemblies() | ?{$_.Location -eq $sSeleniumWebdriverDLL}) { write-host ("{0} is loaded and cannot be updated. Please close powershell window(s)" -f $sSeleniumWebdriverDLL) return } $sTempSeleniumWebdriverNUGETPackage=[System.IO.Path]::GetTempFileName() Invoke-WebRequest -Uri $sSeleniumWebdriverURL -OutFile $sTempSeleniumWebdriverNUGETPackage $sSeleniumWebdriverNUGETPackage = [System.IO.Compression.ZipFile]::OpenRead($sTempSeleniumWebdriverNUGETPackage) $sSeleniumWebdriverNUGETPackage.Entries | ?{$_.FullName -eq "lib/netstandard2.0/WebDriver.dll" } | %{ [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$sSeleniumWebdriverDLL,$true) } $sSeleniumWebdriverNUGETPackage.Dispose() Remove-item $sTempSeleniumWebdriverNUGETPackage } Add-Type -Path $sSeleniumWebdriverDLL -ErrorAction Stop if($ForBrowser -eq "Chrome") { if(!(Test-Path $sChromeWebdriverEXE) -or $Download) { $sTempChromeWebdriverNUGETPackage=[System.IO.Path]::GetTempFileName() Invoke-WebRequest -Uri $sChromWebdriverURL -OutFile $sTempChromeWebdriverNUGETPackage $sChromeWebdriverNUGETPackage = [System.IO.Compression.ZipFile]::OpenRead($sTempChromeWebdriverNUGETPackage) $sChromeWebdriverNUGETPackage.Entries | ?{$_.FullName -eq "driver/win32/chromedriver.exe" } | %{ [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$sChromeWebdriverEXE,$true) } $sChromeWebdriverNUGETPackage.Dispose() Remove-item $sTempChromeWebdriverNUGETPackage } } if($ForBrowser -eq "Edge") { if(!(Test-Path $sEdgeWebdriverEXE) -or $Download) { $sTempEdgeWebdriverNUGETPackage=[System.IO.Path]::GetTempFileName() Invoke-WebRequest -Uri $sEdgeWebdriverURL -OutFile $sTempEdgeWebdriverNUGETPackage $sEdgeWebdriverNUGETPackage = [System.IO.Compression.ZipFile]::OpenRead($sTempEdgeWebdriverNUGETPackage) $sEdgeWebdriverNUGETPackage.Entries | ?{$_.FullName -eq "driver/win32/msedgedriver.exe" } | %{ [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$sEdgeWebdriverEXE,$true) } $sEdgeWebdriverNUGETPackage.Dispose() Remove-item $sTempEdgeWebdriverNUGETPackage } } if($ForBrowser -eq "Firefox") { if(!(Test-Path $sFirefoxWebdriverEXE) -or $Download) { $sTempFirefoxWebdriverNUGETPackage=[System.IO.Path]::GetTempFileName() Invoke-WebRequest -Uri $sFirefoxWebdriverURL -OutFile $sTempFirefoxWebdriverNUGETPackage $sFirefoxWebdriverNUGETPackage = [System.IO.Compression.ZipFile]::OpenRead($sTempFirefoxWebdriverNUGETPackage) $sFirefoxWebdriverNUGETPackage.Entries | ?{$_.FullName -eq "driver/win32/Firefoxdriver.exe" } | %{ [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$sFirefoxWebdriverEXE,$true) } $sFirefoxWebdriverNUGETPackage.Dispose() Remove-item $sTempFirefoxWebdriverNUGETPackage } } } function Start-Browser { param( [Parameter(mandatory=$true)][ValidateSet('Chrome','Edge','Firefox')][string]$browser ) Load-Selenium -ForBrowser $browser switch($browser){ 'Chrome' { $chrome = Get-Package -ErrorAction SilentlyContinue | ?{$_.Name -like "Google Chrome*" } | select -First 1 if (!$chrome){ throw "Google Chrome Browser not installed." return } # create driver service $oDriverService = [OpenQA.Selenium.Chrome.ChromeDriverService]::CreateDefaultService($PWD) # hide command prompt window $oDriverService.HideCommandPromptWindow = $true # create driver object $driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver $oDriverService } 'Edge' { $edge = Get-Package -Name 'Microsoft Edge*' -ErrorAction SilentlyContinue | select -First 1 if (!$edge){ throw "Microsoft Edge Browser not installed." return } # create driver service $oDriverService = [OpenQA.Selenium.Edge.EdgeDriverService]::CreateDefaultService($PWD) # hide command prompt window $oDriverService.HideCommandPromptWindow = $true $driver = New-Object OpenQA.Selenium.Edge.EdgeDriver $oDriverService } 'Firefox' { $ff = Get-Package -Name "Mozilla Firefox*" -ErrorAction SilentlyContinue | select -First 1 if (!$ff){ throw "Mozilla Firefox Browser not installed." return } # create driver service $oDriverService = [OpenQA.Selenium.Firefox.FirefoxDriverService]::CreateDefaultService($PWD) # hide command prompt window $oDriverService.HideCommandPromptWindow = $true # create driver object $driver = New-Object OpenQA.Selenium.Firefox.FirefoxDriver $oDriverService } } return $driver }
Some examples. Load the functions (i.e. copy & paste to the powershell window) then
PS D:\> mkdir MySeleniumProject PS D:\> cd D:\MySeleniumProject PS D:\MySeleniumProject> $WebDriver = Start-Browser Chrome PS D:\MySeleniumProject> $WebDriver.Url = "https://www.ebay.de"
Page reload
$WebDriver.navigate().refresh()
Get EBay price
$WebDriver.FindElements([OpenQA.Selenium.By]::ClassName("x-price-primary")).FindElements([OpenQA.Selenium.By]::TagName("span")).Text
Bit button
$WebDriver.FindElements([OpenQA.Selenium.By]::XPath("//button[@data-elementid='MaxBidId']")) $WebDriver.FindElements([OpenQA.Selenium.By]::XPath("//button[@data-elementid='MaxBidId']")).Click()
Get price input span element
$WebDriver.FindElements([OpenQA.Selenium.By]::XPath("//span[contains(@class,'textbox app-input-price__input textbox__empty')]"))
Get the input tag (child of span)
$InputTag=($WebDriver.FindElements([OpenQA.Selenium.By]::XPath("//span[contains(@class,'textbox app-input-price__input textbox__empty')]"))).findelements([OpenQA.Selenium.By]::TagName("input"))
Send backspaces to delete input
for($i=12;$i -ge 0;$i--) { $InputTag.SendKeys([OpenQA.Selenium.Keys]::Backspace) }
Send price
$InputTag.SendKeys("10,00")
Advertisment to support michlstechblog.info