Selenium의 ChromeDriver에서 시작된 브라우저와 상호 작용

7334 단어 Chromium셀레늄C#

소개



브라우저 자동화 테스트의 사실 표준입니다 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 멤버에 액세스하고 있기 때문에 흑마술감을 부정할 수 없다.
원래 하고 싶은 것이 다른 분위기도 있다.

좋은 웹페이지 즐겨찾기