Quelqu'un peut-il me dire comment identifier et basculer vers l'iframe qui n'a qu'un titre?
<iframe frameborder="0" style="border: 0px none; width: 100%; height: 356px; min-width: 0px; min-height: 0px; overflow: auto;" dojoattachpoint="frame" title="Fill Quote" src="https://tssstrpms501.corp.trelleborg.com:12001/teamworks/process.lsw?zWorkflowState=1&zTaskId=4581&zResetContext=true&coachDebugTrace=none">
J'ai essayé par le code ci-dessous mais cela ne fonctionne pas
driver.switchTo().frame(driver.findElement(By.tagName("iframe")));
vous pouvez utiliser cssSelector,
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
driver.switchTo().frame()
a plusieurs surcharges.
driver.switchTo().frame(name_or_id)
Ici, votre iframe
n’a pas d’identifiant ou de nom, donc pas pour vous.
driver.switchTo().frame(index)
C’est la dernière option à choisir car l’utilisation d’index n’est pas assez stable comme vous pouvez l’imaginer. S'il s'agit de votre seul iframe dans la page, essayez driver.switchTo().frame(0)
driver.switchTo().frame(iframe_element)
Le plus commun. Vous localisez votre iframe comme d'autres éléments, puis vous le transmettez à la méthode.
Ici, le localiser par les attributs title
semble être le meilleur.
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
// driver.switchTo().frame(driver.findElement(By.xpath(".//iframe[@title='Fill Quote']")));
Vous pouvez aussi utiliser src pour passer en frame, voici ce que vous pouvez utiliser:
driver.switchTo().frame(driver.findElement(By.xpath(".//iframe[@src='https://tssstrpms501.corp.trelleborg.com:12001/teamworks/process.lsw?zWorkflowState=1&zTaskId=4581&zResetContext=true&coachDebugTrace=none']")));
Assurez-vous de passer au contenu par défaut avant de passer au cadre:
driver.switchTo().defaultContent();
driver.switchTo().frame(x);
x
peut être le numéro d'image ou vous pouvez créer un driver.findlement
et utiliser l'une des options disponibles, par exemple: driver.findElementByName("Name")
.
Vous pouvez utiliser Css Selector ou Xpath:
Approche 1: Sélecteur CSS
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
Approche 2: Xpath
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@title='Fill Quote']")));
1) goto html view
2) tapez iframe et trouvez votre cadre requis et comptez la valeur et passez-le en utilisant
oASelFW.driver.switchTo().frame(2);
s'il s'agit de la première image, utilisez oASelFW.driver.switchTo().frame(0);
si c'est la deuxième image, utilisez respectivement oASelFW.driver.switchTo().frame(1);
Le moyen le plus simple de procéder est le suivant. Si c'est un cadre, vous pouvez cliquer avec le bouton droit sur le champ et si vous voyez le choix de "ouvrir le cadre dans un onglet", faites-le.
Ensuite, prenez l’URL du cadre et c’est ce que vous avez mis dans votre script Python en utilisant "driver.get ( http: // blah blah ..)
Ensuite, Selenium peut trouver votre élément nommé. Cela m'a épargné des heures d'essayer toutes les suggestions présentées ici, qui portaient sur l'apprentissage mais ne fonctionnaient pas. Le problème avec le mien était qu'il était dans un cadre.
J'utilise Linux, ce qui me donne l'option du clic droit d'ouvrir le cadre, seul, dans un autre onglet. Je n'utilise pas Windows, donc je ne sais pas si vous obtiendriez cette option dans votre menu contextuel.
Ganzarola
J'ai lutté avec cela pendant un moment; un site Web particulièrement frustrant comportait plusieurs cadres imbriqués sur le site. Je ne pouvais trouver aucun moyen d'identifier les cadres - pas de nom, id, xpath, sélecteur css - rien.
Finalement, j'ai réalisé que les images sont numérotées, le niveau supérieur étant l'image (0), la deuxième image (1), etc.
Comme je ne savais toujours pas dans quel élément l'élément dont j'avais besoin était assis, j'ai écrit une boucle for qui partait de 0 et passait d'un cycle à 50, passant continuellement à l'image suivante et essayant d'accéder à l'élément requis; si cela échouait, je devais imprimer un message et continuer.
J'ai passé trop de temps sur ce problème pour une solution aussi simple -_-
driver.switch_to.default_content()
for x in range(50):
try:
driver.switch_to.frame(x)
driver.find_element_by_xpath("//*[@id='23']").click()
driver.find_element_by_xpath("/html/body/form/table/tbody/tr[1]/td/ul/li[49]/a").click()
except:
print("It's not: ", x)
continue