Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk memilih elemen HTML dalam Selenium tidak kira dalam bingkai mana pun ia berada

Saya cuba memilih elemen yang berada dalam iframe dan mungkin berada dalam iframe lain.

Adakah mungkin untuk memilih elemen dalam beberapa iframe (kanak-kanak) dalam (python) selenium tanpa memilih iframe terlebih dahulu? Adakah terdapat cara untuk "gelung" melalui setiap iframe dan semak di mana elemen saya boleh ditemui...?

Bagaimana untuk melakukan ini apabila elemen, kandungan html dan iframe mungkin baru dimuatkan...?

P粉073857911P粉073857911235 hari yang lalu337

membalas semua(2)saya akan balas

  • P粉571233520

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

    Menulis pencari rekursif anda sendiri sepatutnya mudah. Maaf, saya tidak tahu python, tetapi dalam Java ia akan kelihatan seperti ini:

    public void findInAllFrames(WebElement e, String targetIdStr) {
    
        List l = e.findElements(By.tagName("iframe"));
    
        for(int inx=0; inx targets = l.get(inx).findElements(By.id(targetIdStr));
            if(targets.size()>0) {
                // Do something with your targets
            }
    
            findInAllFrames(l.get(inx), targetIdStr);
        }
    }

    balas
    0
  • P粉794851975

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

    Tidak, tidak boleh lulus Selenium, tidak perlu bertukar kepada iframe yang sepadan.

    Sebab:

    Apabila memuatkan halaman, tumpuan Selenium kekal pada tetingkap atas secara lalai. tetingkap atas mengandungi <iframes><iframes>框架集。因此,当我们需要与 iframe 内的 WebElement 进行交互时,我们必须通过以下方法之一切换到相应的 <iframe> dan frameset< /p> yang lain. Jadi apabila kita perlu berinteraksi dengan


    WebElement

    di dalam iframe, kita perlu bertukar kepada

    <iframe>

    yang sepadan melalui salah satu kaedah berikut:

    Kaedah penukaran bingkai:

    Kita boleh bertukar kepada bingkai dalam 3 cara.

    Dengan nama bingkai

    :

    Nama Harta iframe yang melaluinya kita boleh beralih kepadanya.

    Contoh:

    driver.switch_to.frame("iframe_name")
    Mengikut ID bingkai

    :

    Atribut

    ID

    bagi iframe, yang melaluinya kita boleh beralih kepadanya.

    Contoh:

    driver.switch_to.frame("iframe_id")

    Indeks mengikut bingkai

    :

    Andaikan halaman tersebut mempunyai 10 bingkai, kita boleh bertukar kepada iframe melalui indeks.

    Contoh:

    driver.switch_to.frame(0)
    driver.switch_to.frame(1)
    default_content()parent_frame()Tukar kembali ke hos:

    Kita boleh menggunakan

    default_content()
    atau

    parent_frame()

    untuk bertukar kembali ke bingkai utama

    Contoh: expected_conditions 设置为 frame_to_be_available_and_switch_to_it 来诱导 WebDriverWait

    driver.switch_to.default_content()
    driver.switch_to.parent_frame()

    Cara yang lebih baik untuk menukar bingkai:
    • Cara yang lebih baik untuk menukar bingkai adalah dengan mendorong

      WebDriverWait dengan menetapkan keadaan_jangka

      kepada
    • frame_to_be_available_and_switch_to_it
    • daripada ketersediaan yang dijangkakan bingkai , seperti yang ditunjukkan di bawah:

      Oleh
    • ID Bingkai
    • :

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.ID,"id_of_iframe"))

      Oleh
    • nama bingkai
    • :

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

      Melalui
    • Framework Xpath
    :
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"xpath_of_iframe")))

    Melalui

    Framework CSS
      :
    • WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"css_of_iframe")))
    Rujukan🎜 🎜Anda boleh mendapatkan perbincangan terperinci berkaitan di: 🎜 🎜 🎜🎜Cara memproses #dokumen di bawah iframe🎜🎜 🎜

    balas
    0
  • Batalbalas