Maison > Questions et réponses > le corps du texte
J'essaie de sélectionner un élément qui réside dans une iframe et peut résider dans d'autres iframes.
Est-il possible de sélectionner un élément dans une iframe (enfant) dans (python) Selenium sans sélectionner d'abord l'iframe ? Existe-t-il un moyen de "faire une boucle" dans chaque iframe et de vérifier où mon élément peut être trouvé... ?
Comment faire cela lorsque les éléments, le contenu html et l'iframe viennent peut-être d'être chargés... ?
P粉5712335202024-02-27 10:09:53
Écrire votre propre chercheur récursif devrait être facile. Désolé, je ne connais pas Python, mais en Java, cela ressemblerait à ceci :
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
Non, impossible de passer le Sélénium, pas besoin de passer au iframe
correspondant.
Lors du chargement d'une page, le focus de Selenium reste par défaut sur la fenêtre supérieure. La fenêtre supérieure contient d'autres <iframes>
<iframes>
和框架集。因此,当我们需要与 iframe 内的 WebElement 进行交互时,我们必须通过以下方法之一切换到相应的 <iframe>
et framesets< /p>. Ainsi, lorsque nous devons interagir avec un
<iframe>
correspondant via l'une des méthodes suivantes :
Méthode de changement de cadre :
Nous pouvons passer aux cadres de 3 manières.Par nom de monture
:
Name Propriété de l'iframe grâce à laquelle on peut y basculer.
Exemple :
driver.switch_to.frame("iframe_name")Par ID de cadre :
L'attribut
IDdu iframe, grâce auquel nous pouvons y accéder.
Exemple :
driver.switch_to.frame("iframe_id")
Index par image
:Supposons que la page comporte 10 cadres, nous pouvons passer à l'iframe via l'index.
Exemple :
driver.switch_to.frame(0) driver.switch_to.frame(1)
default_content()
或parent_frame()
Revenir à l'hôte :
Nous pouvons utiliser
default_content()
parent_frame()
Exemple : expected_conditions
设置为 frame_to_be_available_and_switch_to_it
来诱导 WebDriverWait
driver.switch_to.default_content()
driver.switch_to.parent_frame()
WebDriverWait
en définissant expected_conditions
frame_to_be_available_and_switch_to_it
Par
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.ID,"id_of_iframe"))Par
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"name_of_iframe")))Via
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"xpath_of_iframe")))
Via
Framework CSSWebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"css_of_iframe")))