Kann mir jemand sagen, wie ich den Iframe identifizieren kann, der nur einen Titel hat?
<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">
Ich habe es mit dem folgenden Code versucht, aber es funktioniert nicht
driver.switchTo().frame(driver.findElement(By.tagName("iframe")));
sie können cssSelector verwenden,
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
driver.switchTo().frame()
weist mehrere Überladungen auf.
driver.switchTo().frame(name_or_id)
Hier hat dein iframe
weder eine ID noch einen Namen, also nichts für dich.
driver.switchTo().frame(index)
Dies ist die letzte Option, die Sie auswählen können, da die Verwendung des Index nicht stabil genug ist, wie Sie sich vorstellen können. Wenn dies Ihr einziger iFrame auf der Seite ist, versuchen Sie es mit driver.switchTo().frame(0)
driver.switchTo().frame(iframe_element)
Die häufigste. Sie lokalisieren Ihren Iframe wie andere Elemente und übergeben ihn dann an die Methode.
Hier scheint die Suche nach title
Attributen die beste zu sein.
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
// driver.switchTo().frame(driver.findElement(By.xpath(".//iframe[@title='Fill Quote']")));
Sie können auch src verwenden, um zum Frame zu wechseln. Folgendes können Sie verwenden:
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']")));
Stellen Sie sicher, dass Sie zu Standardinhalt wechseln, bevor Sie zu Frame wechseln:
driver.switchTo().defaultContent();
driver.switchTo().frame(x);
x
kann die Bildnummer sein oder Sie können einen driver.findlement
verwenden und eine der verfügbaren Optionen verwenden, z. B .: driver.findElementByName("Name")
.
Sie können Css Selector oder Xpath verwenden:
Ansatz 1: CSS Selector
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
Ansatz 2: Xpath
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@title='Fill Quote']")));
1) gehe zur HTML-Ansicht
2) Geben Sie iframe ein und finden Sie Ihr gewünschtes Bild, zählen Sie den Wert und wechseln Sie mit zu ihm
oASelFW.driver.switchTo().frame(2);
wenn es das erste Bild ist, verwenden Sie oASelFW.driver.switchTo().frame(0);
wenn es sich um einen zweiten Frame handelt, verwenden Sie jeweils oASelFW.driver.switchTo().frame(1);
Es gibt drei Möglichkeiten, zum Frame zu wechseln
1)Can use id
2)Can use name of the frame
3)Can use WebElement of the frame
2 -> driver.switchTo().frame("name of the frame");
Am einfachsten geht das so. Wenn es sich um einen Rahmen handelt, können Sie mit der rechten Maustaste auf das Feld klicken und wenn Sie die Option "Rahmen in einem Tab öffnen" sehen, tun Sie es.
Dann nehmen Sie die URL des Frames und das ist, was Sie mit "driver.get" in Ihr Python-Skript einfügen ( http: // blah blah ..)
Dann kann Selen Ihr benanntes Element finden. Dies ersparte mir Stunden, alle Vorschläge auszuprobieren, über die ich lernte, aber nicht funktionierte. Problem mit mir war es in einem Rahmen.
Ich verwende Linux, was mir die Rechtsklick-Option gibt, den Frame von selbst in einem anderen Tab zu öffnen. Ich benutze Windows nicht, also weiß ich nicht, ob Sie diese Option im Rechtsklick-Menü erhalten würden.
Ganzarola
Ich kämpfte damit für eine Weile; Eine besonders frustrierende Website hatte mehrere verschachtelte Frames auf der Website. Ich konnte keinen Weg finden, die Frames zu identifizieren - kein Name, keine ID, kein Xpath, kein CSS-Selector - nichts.
Irgendwann erkannte ich, dass die Bilder mit der obersten Ebene nummeriert sind, wobei Bild (0) das zweite Bild (1) usw. ist.
Da ich immer noch nicht wusste, in welchem Frame das Element, in dem ich brauchte, saß, schrieb ich eine for-Schleife, um von 0 bis 50 zu beginnen. Wenn dies fehlgeschlagen ist, habe ich eine Nachricht ausdrucken und fortfahren können.
Ich habe zu viel Zeit mit diesem Problem für eine so einfache Lösung verbracht.
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