Bagaimana untuk memilih elemen HTML dalam Selenium tidak kira dalam bingkai mana pun ia berada
P粉073857911
P粉073857911 2024-02-26 11:11:52
0
2
374

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粉073857911
P粉073857911

membalas semua(2)
P粉571233520

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);
    }
}
P粉794851975

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 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🎜🎜 🎜
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan