Equipment with a Web management screen has an authentication screen. I want to automate it somehow. Projectors, webcams, and more.
Continue reading the Selenium Browser Automation Project (https://www.selenium.dev/documentation/ja/).
Install the latest version from Ruby Installer for windows.
I referred to [Beginner] From Ruby installation to simple program execution.
Run it with cmd.exe.
gem install selenium-webdriver
If you think you can do it from the Chrome download from the Quick Reference in Driver Requirements (https://www.selenium.dev/documentation/ja/webdriver/driver_requirements/), you'll see a list of version folders. The number is the latest, so open the folder and download "chromedriver_win32.zip".
Unzip the zip and save "chromedriver.exe" in C: \ WebDriver \ bin.
pass through path
setx /m path "%path%;C:\WebDriver\bin\"
Reboot the OS and try
>chromedriver
Starting ChromeDriver 88.0.4324.27 (6347fe8bf1e48bd0c54d07dc55ca011cf40861c9-refs/branch-heads/4324@{#450}) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
Create a trial file.
selenium.rb
require "selenium-webdriver"
driver = Selenium::WebDriver.for :chrome
Run the trial file.
>ruby 20201217001.rb
Traceback (most recent call last):
2: from 20201217001.rb:1:in `<main>'
1: from C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- selenium-webdriver (LoadError)
(Omitted)
x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'
C:/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- ffi (LoadError)
(Omitted)
3.0.0/lib/childprocess/windows.rb:3:in `<top (required)>'
C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/childprocess-3.0.0/lib/childprocess/windows.rb:6:in `rescue in <top (required)>': FFI is a required pre-requisite for Windows or posix_spawn support in the ChildProcess gem. Ensure the `ffi` gem is installed. If you believe this is an error, please file a bug at http://github.com/enkessler/childprocess/issues (ChildProcess::MissingFFIError)
I got an error.
It's easy to get caught up in the first "` require': cannot load such file --selenium-webdriver (LoadError) ". The "ffi" that appeared in the middle is like a point. Or maybe the Q & A site hasn't pasted the error, so it hasn't been resolved.
I'm overconfident that this is the correct answer for the QA site in the world.
gem install ffi
This time should be fine.
>ruby 20201217001.rb
DevTools listening on ws://127.0.0.1:49937/devtools/browser/2ac6997d-7b76-4230-b56a-b05765457035
Traceback (most recent call last):
(Omitted)
Backtrace:: session not created: This version of ChromeDriver only supports Chrome version 88 (Selenium::WebDriver::Error::SessionNotCreatedError)
Current browser version is 87.0.4280.88 with binary path C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe
that? It seems that the browser and WebDriver versions do not match. It seems that the latest is not good. Download the same version from the driver requirements and replace it with C: \ WebDriver \ bin.
>ruby 20201217001.rb
DevTools listening on ws://127.0.0.1:50041/devtools/browser/a4f2bc4b-2ead-48bc-9af6-db8329221104
It seems to have succeeded. (Really?)
It's different from trying.
require "selenium-webdriver"
driver = Selenium::WebDriver.for :chrome
#Open URL
#driver.get 'https://selenium.dev'
In a blink of an eye, why? The browser closes. It seems that the driver needs a closing or closing command.
#sleep(5)
Keep it a little if you add it to the end. But I stopped with wait.
How to access Basic authentication site with Selenium Webdriver
driver.get 'http://admin:[email protected]/basic_auth'
Here, a voice came out without permission, "Wow!"
The page is displayed after authentication. I want to get rid of the code looking for an element before it's displayed.
Try inserting Wait with Selenium Webdriver
#Variable declaration that gives wait a 60-second timer
wait = Selenium::WebDriver::Wait.new(:timeout => 60)
#Matsu until it is displayed
wait.until{driver.find_element(:id, 'pst_select').displayed?}
The element cannot be found by any means. Frame nested orz
The operation of the frame does not work. I decided to open the frame directly.
Specify a value and click.
#Specify element
element = driver.find_element(:id, 'pst_select')
#Select tag specification
select = Selenium::WebDriver::Support::Select.new(element)
#Value specification
select.select_by(:value, '1')
#Click an element
driver.find_element(:id, 'pst_move').click
I want to operate multiple devices, so I made a loop.
cam_reset.rb
require "selenium-webdriver"
roomNum = { "001" => "10.1.1.1",
"002" => "10.1.1.2"}
roomNum.each{|room, ipAddress|
driver = Selenium::WebDriver.for :chrome
#Open URL
camUrl = "http://account:password@" + ipAddress + "/live/live_flame_ctrl.html"
driver.get camUrl
#Variable declaration that gives wait a 60-second timer
wait = Selenium::WebDriver::Wait.new(:timeout => 60)
#Matsu until it is displayed
wait.until{driver.find_element(:id, 'pst_select').displayed?}
#Specify element
element = driver.find_element(:id, 'pst_select')
#Select tag specification
select = Selenium::WebDriver::Support::Select.new(element)
#Value specification
select.select_by(:value, '1')
#Click an element
driver.find_element(:id, 'pst_move').click
#close
driver.close
}
All you have to do is create a batch file.
camreset.bat
ruby cam_reset.rb