質問編集履歴

1

ソースコードを追記。

2019/02/05 20:09

投稿

mika33532
mika33532

スコア27

test CHANGED
File without changes
test CHANGED
@@ -25,3 +25,87 @@
25
25
  ・Selenium.Support v3.141.0 (NuGetでインストール)
26
26
 
27
27
  ・Selenium.WebDriver v3.141.0 (NuGetでインストール)
28
+
29
+
30
+
31
+
32
+
33
+ ---
34
+
35
+
36
+
37
+ wwbQzhMkhhgEmhU 様、ありがとうございます。
38
+
39
+
40
+
41
+ 対象のWebサイトは、他社のものでログイン認証後のページになりますので、URLの公開は差し控えたいと思います。
42
+
43
+ ソースコードは、抜粋ですが下記のような感じです。
44
+
45
+ 問題点がありましたら、ご指摘いただけるとありがたいです。
46
+
47
+
48
+
49
+ ```C#
50
+
51
+ // ChromeWebDriverを作成
52
+
53
+ IWebDriver driver;
54
+
55
+ chromeDriverFilePath = "C:\chromedriver";
56
+
57
+ hideCommandPromptWindow = true;
58
+
59
+ chromeOptions = new ChromeOptions();
60
+
61
+ ChromeDriverService chromeService = ChromeDriverService.CreateDefaultService(chromeDriverFilePath);
62
+
63
+ chromeService.HideCommandPromptWindow = hideCommandPromptWindow;
64
+
65
+ ChromeOptions chromeOptions = new ChromeOptions();
66
+
67
+ ChromeDriver driver = new ChromeDriver(chromeService, chromeOptions);
68
+
69
+
70
+
71
+ // トップページを開く(この時点でiframeIdが指す<IFRAME>に概要説明のHTMLが表示される)
72
+
73
+ driver.Url = "https://xxxxx.co.jp/index.aspx";
74
+
75
+
76
+
77
+ // 取引ボタンをクリックする(SeleniumのClick()やSendKeys(Keys.Enter)が効かなかったので現在は手動でクリックしている)
78
+
79
+ // このときにJSによりiframeIdが指す<IFRAME>の内容が取引用の<FORM>に差し替えられる。
80
+
81
+
82
+
83
+ // JSの処理が完全に完了するまで長時間Waitする
84
+
85
+ Thread.Sleep(10 * 1000);
86
+
87
+
88
+
89
+ // IFRAMEを探してSwitchする
90
+
91
+ var iframeElements = driver.FindElements(By.Id(iframeId));
92
+
93
+ var iframeElement = iframeElements[0];
94
+
95
+ driver.SwitchTo().Frame(iframeElement);
96
+
97
+
98
+
99
+ // IFRAME内にある<FORM>を取得する
100
+
101
+ Console.WriteLine(driver.PageSource); // ★1.取引用の<FORM>が含まれるHTMLではなく、概要説明のHTMLが表示された。
102
+
103
+ var orderForm = driver.FindElements(By.Name("orderForm")); // ★2.取引用の<FORM>では無いのでnullが返ってくる。
104
+
105
+
106
+
107
+ // 元に戻す
108
+
109
+ driver.SwitchTo().DefaultContent();
110
+
111
+ ```