Rumah > Soal Jawab > teks badan
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粉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) { Listl = 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粉7948519752024-02-27 10:03:34
Tidak, tidak boleh lulus Selenium, tidak perlu bertukar kepada iframe
yang sepadan.
Apabila memuatkan halaman, tumpuan Selenium kekal pada tetingkap atas secara lalai. tetingkap atas mengandungi <iframes>
<iframe>
dan frameset< /p> yang lain. Jadi apabila kita perlu berinteraksi dengan
<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
IDbagi 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()
parent_frame()
Contoh: expected_conditions
设置为 frame_to_be_available_and_switch_to_it
来诱导 WebDriverWait
driver.switch_to.default_content()
driver.switch_to.parent_frame()
Oleh
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.ID,"id_of_iframe"))Oleh
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"name_of_iframe")))Melalui
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"xpath_of_iframe")))
Melalui
Framework CSSWebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"css_of_iframe")))