いつもお世話になっております。
C#版SeleniumでWebフォーム(<FORM>)を操作したいのですが、WebDriverのPageSourceで取得したHTMLにはWebフォームのソースコードが含まれていませんでした。
Chromeでソースを確認するとWebフォームのソースコードが含まれていました。
対象のWebページは、初期表示時にJavaScriptで<IFRAME>へフォームのHTMLソースを埋め込んでいるようです。
Chrome上にフォームが表示されて、しばらく経ってからWebDriverのPageSourceを確認したのですが、Webフォームのソースコードが取得できませんでした。(取得できたのは埋め込み前のソースコードだと思われます)
driver.SwitchTo().Frame(iframeElement) を再実行してもダメでした。
埋め込み後のHTMLを取得したいのですが、なにかヒントになりそうなことがありましたら教えていただけますでしょうか。
よろしくお願いいたします。
開発環境:
・Visual Studio 2017 Community (C#)
・Selenium.Chrome.WebDriver v2.45.0 (NuGetでインストール)
・Selenium.Support v3.141.0 (NuGetでインストール)
・Selenium.WebDriver v3.141.0 (NuGetでインストール)
wwbQzhMkhhgEmhU 様、ありがとうございます。
対象のWebサイトは、他社のものでログイン認証後のページになりますので、URLの公開は差し控えたいと思います。
ソースコードは、抜粋ですが下記のような感じです。
問題点がありましたら、ご指摘いただけるとありがたいです。
C#
1// ChromeWebDriverを作成 2IWebDriver driver; 3chromeDriverFilePath = "C:\chromedriver"; 4hideCommandPromptWindow = true; 5chromeOptions = new ChromeOptions(); 6ChromeDriverService chromeService = ChromeDriverService.CreateDefaultService(chromeDriverFilePath); 7chromeService.HideCommandPromptWindow = hideCommandPromptWindow; 8ChromeOptions chromeOptions = new ChromeOptions(); 9ChromeDriver driver = new ChromeDriver(chromeService, chromeOptions); 10 11// トップページを開く(この時点でiframeIdが指す<IFRAME>に概要説明のHTMLが表示される) 12driver.Url = "https://xxxxx.co.jp/index.aspx"; 13 14// 取引ボタンをクリックする(SeleniumのClick()やSendKeys(Keys.Enter)が効かなかったので現在は手動でクリックしている) 15// このときにJSによりiframeIdが指す<IFRAME>の内容が取引用の<FORM>に差し替えられる。 16 17// JSの処理が完全に完了するまで長時間Waitする 18Thread.Sleep(10 * 1000); 19 20// IFRAMEを探してSwitchする 21var iframeElements = driver.FindElements(By.Id(iframeId)); 22var iframeElement = iframeElements[0]; 23driver.SwitchTo().Frame(iframeElement); 24 25// IFRAME内にある<FORM>を取得する 26Console.WriteLine(driver.PageSource); // ★1.取引用の<FORM>が含まれるHTMLではなく、概要説明のHTMLが表示された。 27var orderForm = driver.FindElements(By.Name("orderForm")); // ★2.取引用の<FORM>では無いのでnullが返ってくる。 28 29// 元に戻す 30driver.SwitchTo().DefaultContent();
あなたの回答
tips
プレビュー