検索

ホームページ  >  に質問  >  本文

どのフレームにあるかに関係なく、Selenium で HTML 要素を選択する方法

iframe 内に存在し、他の iframe 内に存在する可能性がある要素を選択しようとしています。

最初に iframe を選択せず​​に、(Python) Selenium の一部の (子) iframe 内の要素を選択することは可能ですか?何らかの方法で各 iframe を「ループ」して、要素がどこにあるかを確認する方法はありますか?

要素、HTML コンテンツ、および iframe がロードされたばかりの場合にこれを行うにはどうすればよいですか...?

P粉073857911P粉073857911274日前393

全員に返信(2)返信します

  • P粉571233520

    P粉5712335202024-02-27 10:09:53

    独自の再帰ファインダーを作成するのは簡単です。申し訳ありませんが、私は Python については知りませんが、Java では次のようになります:

    public void findInAllFrames(WebElement e, String targetIdStr) {
    
        List l = e.findElements(By.tagName("iframe"));
    
        for(int inx=0; inx ターゲット = l.get(inx).findElements(By.id(targetIdStr));
            if(targets.size()>0) {
                // ターゲットに対して何かを行う
            }
    
            findInAllFrames(l.get(inx), targetIdStr);
        }
    }

    返事
    0
  • P粉794851975

    P粉7948519752024-02-27 10:03:34

    NoSelenium を渡すことはできません。対応する iframe に切り替える必要はありません。

    ###理由:###

    ページをロードするとき、Selenium のフォーカスはデフォルトで上部ウィンドウに残ります。

    トップ ウィンドウ

    には、他の <iframes> および framesets が含まれています。したがって、iframe 内の WebElement を操作する必要がある場合は、次のいずれかの方法で、対応する <iframe> に切り替える必要があります。 ## フレーム切り替え方式:


    フレームは 3 つの方法で切り替えることができます。

    フレーム名別

    :

    Name

    iframe に切り替えるための iframe の属性。

    ###例:### driver.switch_to.frame("iframe_name")

    フレームID別

    :
    iframe の 

    ID 属性。これを介してそれに切り替えることができます。 ###例:###

    driver.switch_to.frame("iframe_id")

    フレームごとのインデックス

    :

    ページに 10 個のフレームがあると仮定すると、index を通じて iframe に切り替えることができます。
    ###例:###
    
    driver.switch_to.frame(0) driver.switch_to.frame(1)

    ホストに戻ります

    :

    default_content()

     または 

    parent_frame() を使用してメイン フレームに戻すことができます

    ###例:###

    driver.switch_to.default_content() driver.switch_to.parent_frame() フレームを切り替えるより良い方法: フレームを切り替えるより良い方法は、expected_conditions

    frame_to_be_available_and_switch_to_it
     に設定して 

    WebDriverWait# を引き起こすことです

    ## 期待されるフレームワークの可用性を取得するには、次のようにします:

    パス フレーム ID: WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.ID,"id_of_iframe")) 投稿者 フレーム名

    :
    • WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"name_of_iframe")))

      経由
      FrameworkXpath
      :
    • WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"xpath_of_iframe")))

       フレーム CSS 
      経由:
    • WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"css_of_iframe")))

      ###参照する###
       これに関する詳細な説明は、次の場所にあります。 
    • iframe 下の #document を処理する方法

      返事
      0
  • キャンセル返事