teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

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

2019/11/06 02:25

投稿

sha_ka_ma
sha_ka_ma

スコア5

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