Selenium의 ChromeDriver에서 시작된 브라우저와 상호 작용
소개
브라우저 자동화 테스트의 사실 표준입니다 Selenium
기본적으로 Selenium
그러나 시작된 브라우저를 자동으로 조작하고 싶습니다! 라는 경우도 있죠?
과연 ChromeDriver
를 사용하여 실행된 브라우저를 조작할 수 있습니까?
움직일 때의 감동은 생략
했던 일
브라우저 시작
이 기법은 Google 크롬을 시작하는 데 포인트가 있습니다.
커맨드 라인 인수로 -remote-debugging-port=9222
를 지정해 줄 것입니다!
DevTools Protocol 가 유효한 상태로 브라우저가 기동하므로, Selenium
가 첨부할 수 있게 되네요.
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -remote-debugging-port=9222 --user-data-dir=C:\Temp_ForChrome
--user-data-dir
의 지정도 잊지 않고.
조작중인 브라우저 이외에 Google 크롬을 실행하는 경우,
사용자 프로필이 있는 폴더로 동일한 경로를 Selenium에서 지정할 수 없는 것 같습니다.
내 환경에서 시간 초과 오류가 발생했습니다.
OpenQA.Selenium.WebDriverException: The HTTP request to the remote WebDriver server for URL http://localhost:61065/session timed out after 60 seconds. ---> System.Net.WebException: 요청이 중단되었습니다. 작업이 시간 초과되었습니다.
참고 : Selenium에서 Chrome의 사용자 프로필을 지정하면서 동시에 Chrome을 사용하는 방법
출처
ChromeOptions.DebuggerAddress
에 브라우저 기동시에 지정한 것과 같은 포트 번호를 지정합니다.
브라우저가 시작된 상태에서 본 프로그램을 실행하면 훌륭하게 움직이기 시작합니다.
var options = new ChromeOptions
{
DebuggerAddress = "127.0.0.1:9222"
};
using (var driver = new ChromeDriver(options))
{
var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 5));
// 任意のブラウザ操作処理 ↓↓↓
driver.Url = "https://www.google.com";
var q = driver.FindElementByName("q");
q.SendKeys("Chromium");
q.Submit();
wait.Until(ExpectedConditions.TitleIs("Chromium - Google 検索"));
((ITakesScreenshot)driver).GetScreenshot().SaveAsFile($"{DateTime.Now.ToString("yyyyMMddHHmmss")}.png");
// 任意のブラウザ操作処理 ↑↑↑
}
덤
Google 크롬을 시작하는 부분이 포인트였습니다.
여기에서 수동이 아닌 다른 프로그램을 통해 시작된 브라우저를 자동 조작하고 싶은 경우를 생각해 봅시다.
좋은 일 -remote-debugging-port
를 지정해 줄 필요가 있죠?
그렇다면 이런 느낌? . ?
using System.Diagnostics;
/// <summary>
/// chrome.exe という名前のアセンブリとしてビルドする
/// </summary>
namespace DummyChrome
{
class Program
{
static void Main(string[] args)
{
var proc = new Process();
proc.StartInfo.FileName = @"C:\Program Files (x86)\Google\Chrome\Application\_chrome.exe";
proc.StartInfo.Arguments = @"-remote-debugging-port=9222 --user-data-dir=C:\Temp_ForChrome";
proc.Start();
}
}
}
원래 chrome.exe
는 _chrome.exe
로 이름이 바뀝니다.
Google 크롬의 정상적인 이용에 지장이 드는 것은 애경.
결론
참고로 한 페이지:
Selenium: Attach to an existing Chrome browser with C#
도움이 될 것 같지 않은 페이지 :
Re-using existing browser session in Selenium using C#Reflection
를 사용해 private
멤버에 액세스하고 있기 때문에 흑마술감을 부정할 수 없다.
원래 하고 싶은 것이 다른 분위기도 있다.
Reference
이 문제에 관하여(Selenium의 ChromeDriver에서 시작된 브라우저와 상호 작용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yk109/items/6cab9564d1844d272a8c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
브라우저 시작
이 기법은 Google 크롬을 시작하는 데 포인트가 있습니다.
커맨드 라인 인수로
-remote-debugging-port=9222
를 지정해 줄 것입니다!DevTools Protocol 가 유효한 상태로 브라우저가 기동하므로,
Selenium
가 첨부할 수 있게 되네요."C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -remote-debugging-port=9222 --user-data-dir=C:\Temp_ForChrome
--user-data-dir
의 지정도 잊지 않고.조작중인 브라우저 이외에 Google 크롬을 실행하는 경우,
사용자 프로필이 있는 폴더로 동일한 경로를 Selenium에서 지정할 수 없는 것 같습니다.
내 환경에서 시간 초과 오류가 발생했습니다.
OpenQA.Selenium.WebDriverException: The HTTP request to the remote WebDriver server for URL http://localhost:61065/session timed out after 60 seconds. ---> System.Net.WebException: 요청이 중단되었습니다. 작업이 시간 초과되었습니다.
참고 : Selenium에서 Chrome의 사용자 프로필을 지정하면서 동시에 Chrome을 사용하는 방법
출처
ChromeOptions.DebuggerAddress
에 브라우저 기동시에 지정한 것과 같은 포트 번호를 지정합니다.브라우저가 시작된 상태에서 본 프로그램을 실행하면 훌륭하게 움직이기 시작합니다.
var options = new ChromeOptions
{
DebuggerAddress = "127.0.0.1:9222"
};
using (var driver = new ChromeDriver(options))
{
var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 5));
// 任意のブラウザ操作処理 ↓↓↓
driver.Url = "https://www.google.com";
var q = driver.FindElementByName("q");
q.SendKeys("Chromium");
q.Submit();
wait.Until(ExpectedConditions.TitleIs("Chromium - Google 検索"));
((ITakesScreenshot)driver).GetScreenshot().SaveAsFile($"{DateTime.Now.ToString("yyyyMMddHHmmss")}.png");
// 任意のブラウザ操作処理 ↑↑↑
}
덤
Google 크롬을 시작하는 부분이 포인트였습니다.
여기에서 수동이 아닌 다른 프로그램을 통해 시작된 브라우저를 자동 조작하고 싶은 경우를 생각해 봅시다.
좋은 일 -remote-debugging-port
를 지정해 줄 필요가 있죠?
그렇다면 이런 느낌? . ?
using System.Diagnostics;
/// <summary>
/// chrome.exe という名前のアセンブリとしてビルドする
/// </summary>
namespace DummyChrome
{
class Program
{
static void Main(string[] args)
{
var proc = new Process();
proc.StartInfo.FileName = @"C:\Program Files (x86)\Google\Chrome\Application\_chrome.exe";
proc.StartInfo.Arguments = @"-remote-debugging-port=9222 --user-data-dir=C:\Temp_ForChrome";
proc.Start();
}
}
}
원래 chrome.exe
는 _chrome.exe
로 이름이 바뀝니다.
Google 크롬의 정상적인 이용에 지장이 드는 것은 애경.
결론
참고로 한 페이지:
Selenium: Attach to an existing Chrome browser with C#
도움이 될 것 같지 않은 페이지 :
Re-using existing browser session in Selenium using C#Reflection
를 사용해 private
멤버에 액세스하고 있기 때문에 흑마술감을 부정할 수 없다.
원래 하고 싶은 것이 다른 분위기도 있다.
Reference
이 문제에 관하여(Selenium의 ChromeDriver에서 시작된 브라우저와 상호 작용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yk109/items/6cab9564d1844d272a8c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using System.Diagnostics;
/// <summary>
/// chrome.exe という名前のアセンブリとしてビルドする
/// </summary>
namespace DummyChrome
{
class Program
{
static void Main(string[] args)
{
var proc = new Process();
proc.StartInfo.FileName = @"C:\Program Files (x86)\Google\Chrome\Application\_chrome.exe";
proc.StartInfo.Arguments = @"-remote-debugging-port=9222 --user-data-dir=C:\Temp_ForChrome";
proc.Start();
}
}
}
참고로 한 페이지:
Selenium: Attach to an existing Chrome browser with C#
도움이 될 것 같지 않은 페이지 :
Re-using existing browser session in Selenium using C#
Reflection
를 사용해 private
멤버에 액세스하고 있기 때문에 흑마술감을 부정할 수 없다.원래 하고 싶은 것이 다른 분위기도 있다.
Reference
이 문제에 관하여(Selenium의 ChromeDriver에서 시작된 브라우저와 상호 작용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yk109/items/6cab9564d1844d272a8c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)