質問編集履歴

1

実施したソースコードの追記

2019/11/06 02:25

投稿

sha_ka_ma
sha_ka_ma

スコア5

test CHANGED
File without changes
test CHANGED
@@ -2,19 +2,13 @@
2
2
 
3
3
 
4
4
 
5
- Seleniumを使用してWEBページから要素抽出を行うプログラムを書いているのですが、
5
+ SeleniumのWebDraiverを使用し、ブラウザ操作自動化を行ているのですが、
6
6
 
7
- 一連れの複数回WEBページ遷移する場面がありま
7
+ ページにアクセスし、特定要素が表示さた時点で、読み込みを待たず次処理進む方法分かりません
8
8
 
9
- 現状はWEBページ遷移すると、読み込み完全に終了してから処理が動いている状態です。
9
+ 調べたところ、WebDriverWaitクラスとExpectedConditionsクラスを使えば要素表示されるまで待機するが分かったので下記コードで実行を行いましたが要素表示されてからもページ全体読み込みを待っているように見えます。
10
10
 
11
-
12
-
13
- 実現したいこととしては、WEBページが遷移して完全にページを読み込む前に、htmlの特定要素があれば
14
-
15
- 次の処理に進むプログラムにしたいです。
16
-
17
- 特定要素表示された段階WEBページロードを停止するよう処理るのでしょうか。
11
+ (要素表示されており手動クリックできる状態ですが、ブラウザ左下にキャッシュ待機中…どが表示され読み込みが完全終わるのを待っている状態
18
12
 
19
13
 
20
14
 
@@ -22,30 +16,60 @@
22
16
 
23
17
 
24
18
 
25
- ```java
19
+ ```WebDriverWait
26
20
 
27
- public class WebTest{
21
+ //ページにアクセスする
28
22
 
29
- public static void main(String[] args){
23
+ driver.get("https://");
30
24
 
31
- System.setProperty("webdriver.chrome.driver",
25
+ //submitBtnの要素が表示されるまで最大10秒待機
32
26
 
27
+ Wait<WebDriver> wait = new WebDriverWait(driver, 10);
28
+
29
+ wait.until(visibilityOfElementLocated(By.className("submitBtn")));
30
+
31
+ //submitBtnをクリック
32
+
33
+ WebElement element = driver.findElement(By.className("submitBtn"));
34
+
35
+ element.click();
36
+
37
+ ```
38
+
39
+ ```ExpectedConditions
40
+
41
+ //ページにアクセスする
42
+
33
- "C:\chromedriver.exe");
43
+ driver.get("https://");
34
44
 
35
45
 
36
46
 
37
- WebDriver driver = new ChromeDriver();
47
+ ExpectedCondition<WebElement> waitCondition = new ExpectedCondition<WebElement>() {
38
48
 
39
- driver.get("https://www.google.co.jp");
49
+   public WebElement apply(WebDriver driver) {
40
50
 
41
- WebElement element = driver.findElement(By.id("lst-ib"));
51
+     return driver.findElement(By.className("submitBtn"));
42
52
 
43
- element.sendKeys("テスト");
53
+ }
44
54
 
45
- element.sendKeys(Keys.ENTER);
55
+ });
46
56
 
47
- }
57
+ //submitBtnをクリック
48
58
 
59
+ WebElement element = driver.findElement(By.className("submitBtn"));
60
+
49
- }
61
+ element.click();
62
+
63
+
64
+
65
+ wait.until(waitCondition);
50
66
 
51
67
  ```
68
+
69
+
70
+
71
+ 上記で実行すると要素が表示されてからもページの読み込みが続行してしまうので手動でボタンを押した方が早くなってしまう状態です。
72
+
73
+ まとめると、ページ読み込み中でもボタンがあればクリックするという処理にしたいです。
74
+
75
+ 勉強不足で非同期処理などあまり詳しくは分からないのですが関係があるのでしょうか。