

Javaでselenium.htmlunit.HtmlUnitDriver （selenium-server-standalone-3.9.1
jar）を使って、あるページをスクレイプしています。

ページは２つのiframeで構成されています。最初にページ全体をget()してgetPageSource()を見ると内包されたiframeの内容含め全て取得されているように見えます。そして、いざそのiframe内の要素を取りに行くために、frame
switchをすると、何も取れなくなってしまいます。frame
switch自体は、例外もエラーもないので、うまく処理されているように思えます。ただframeに行った後にgetElements()で何も取れず、getPageSource()をするとからのsourceがプリントされます。

[code]

        driver.switchTo().defaultContent();
        
        //下のラインはエラー例外もなく動きます。ということは’xyz’フレームも認識しているはずです
        //ちなみにここに存在しないフレーム名を入れるともちろん例外が起きますので、ここは正常に動いているはずです 
        
        driver.switchTo().frame(driver.findElement(By.id("xyz")));
        
        
        //ここで、driver.getPageSource()をすると下のような何も入っていないものがかえります
        //本来はきちんとしたフレームhtmlが存在していまして、そこのものを色々取りたいのです
        //<html>
        // <head/>
        // <body/>
        //</html>
        
        //また元に戻ると全体sourceはきちんと見えます
        driver.switchTo().defaultContent();
        driver.getPageSource();
    
[/code]

ちなみにJavascriptEnabledはすでにオンしています。それから、rootのページの色々な要素は問題なく取得できます。ページロードの時間の問題なのかと思い、WebDriverWait/ExpectedConditionを使い色々試しましたがうまくいきませんでした。そもそも最初のgetPageSource()でiframe内含め全部見えているので、loadの問題ではないように思えます。

何がいけないのか、どなたかご教授いただけますか？


CC BY-SA 4.0
2023-01-07T02:03:22.610
93220
2023-01-07T02:03:22.610
56422
question
java selenium selenium-webdriver
HtmlUnitDriverでframe switchした後にiframe 内の要素が何も取得できない