投稿者 えんぴー  (社会人) 投稿日時 2024/6/3 17:10:24
いつもお世話になっております。
調べても中々見つからないため、たびたび申し訳ありませんが質問させてください。

1.Chromeを起動して自動操作をする
2.①の段階でユーザーがChrome画面を閉じていたら起動しなおす、
  閉じておらず開いたままであれば再利用する

ということを実施したいと思っています。



        public static ChromeDriver driver;
        private readonly string driverLocation = Environment.GetEnvironmentVariable("CHROMEWEBDRIVER");

        private bool Chrome_Login(bool BrowserView = true)
        {

  try
  {
      string Path = System.AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\');
      new DriverManager().SetUpDriver(new ChromeConfig(), VersionResolveStrategy.Latest);
      var driverService = ChromeDriverService.CreateDefaultService();
      ChromeOptions options = new ChromeOptions();
      if (BrowserView == false)
      {
          options.AddArgument("--headless");//完全非表示
      }
      options.AddArgument("no-sandbox");//240517追記
      options.AddExcludedArgument("enable-automation");
      options.AddUserProfilePreference("download.default_directory", Path);
      driverService.HideCommandPromptWindow = true;//コマンドウィンドウ非表示
      driver = new ChromeDriver(driverService, options, TimeSpan.FromSeconds(20));//
      driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(3);//
  }
  catch (OpenQA.Selenium.WebDriverException)
  {
      MessageBox.Show("Chromeを起動してバージョンを最新にしてください");

      Process[] processes = Process.GetProcessesByName("chromedriver");
      foreach (Process process in processes)
      {
          process.Kill();
      }
  }
}


        private void TEST(int NowRow = 0)
        {
  bool KidouCheck = false;
  if (driver == null)//nullになっているパターンと、なっていないパターンがある
  {
      KidouCheck = Chrome_Login();
      if (KidouCheck == falsereturn;
  }

  driver.Url = "http:";//←手動でChromeを閉じると、すでに閉じたとエラーになる
}



自動操作途中のChromeを手動で閉じて
driverのローカル値を見ていましたが
driverがnullになるパターンとならないパターンがあります。
判定直前で落とすと、null判断になりませんでした。

SessionIDとかも関係あるかと思ったのですが
trueのままになってしまい、driverでブラウザを起動していて
ブラウザを閉じていないかの判断方法が分かりません。

あと、起動しているブラウザの拡大率を70%とかに変更したいのですが
それも方法が分かりませんでした。


以下のようにすることを考えたのですが、
何ヵ所か同じようにブラウザの確認をして~というのを利用するため
行数が増えるのと読みづらくなるのがとても嫌でした。


  if (driver == null)
  {
      KidouCheck = Chrome_Login();
      if (KidouCheck == falsereturn;
  }
  try
  {
      var ChromeHandle=chrome.CurrentWindowHandle;
  }
  catch (NoSuchWindowException ex)
  {
      KidouCheck = Chrome_Login();
  }



聞きたいこととしては以下3点です。
・Driver側で、閉じたかどうか簡単に判別する方法はあるか
 →上記方法はありますが、もっと使いまわしのしやすい方法やアドバイスがあればほしいです

・ログイン等をした際、「パスワードを保存するか」などその他ポップアップが出てきますが
 それを出てこないようにする方法はあるか
 →昨日から調べていますが見つからず、継続して調べているところです

・閉じる前の拡大率を保持しておく方法はあるか
 (デフォルトで拡大率を設定する方法はあるか)

質問ばかりで申し訳ありませんが、よろしくお願いいたします。