0

Ich verwende Python + Selenium, um mit einer Webseite mit Frameset und Frames zu interagieren.Browser unterstützt keine Frames Ausnahme

Allerdings bekomme ich diesen Fehler, wenn ich wie print driver.page_source etw:

<frameset cols="*" border="0" framespacing="0" rows="118,*" frameborder="0" onbeforeunload="unload()"> 
    <frame src="/xxx/frameset/xxx.html" name="ENTETE_WIN" id="ENTETE_WIN" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" /> 
    <frame src="/xxx/frameset/bodyFrame.html" name="BODY_WIN" id="BODY_WIN" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" /> 
    <noframes> 
     &lt;body bgcolor="#FFFFFF"&gt; 
     This browser does not support frames. 
     &lt;/body&gt; 
    </noframes> 
</frameset> 

Meine Selen Version 2.53.2 ist. Ich habe es mit Firefox und Chrome mit Treiber 2.21 versucht.

+0

Welchen Browser verwenden Sie, Version usw. Bitte geben Sie weitere Details an. –

+0

@MichaelMarkidis Sorry, ich bearbeite meine Frage, aber sie wurde versehentlich gepostet. – user2789928

Antwort

1

Wenn ich Ihre Frage richtig verstehe, erhalten Sie keinen Fehler. Was driver.page_source zeigt, ist ein tatsächlicher HTML-Code der Seite. In Ihrem Fall enthält die Seite 2 Frames sowie einen zusätzlichen Abschnitt namens <noframes>, den der Endanwender sehen würde, wenn sein Browser keine Frames unterstützt. Also, was Sie sehen, ist kein Fehler für Sie.

Ich empfehle für Ihre Automatisierung, ignorieren Sie die gesamte <noframes> Abschnitt alle zusammen. Nur sehr alte Browser (z. B. IE 2) unterstützen keine Frames (siehe detaillierte Erläuterung zu Frames here).

Nun, wenn ich richtig verstehe, ist Ihr Problem, dass Sie keine Elemente auswählen können, weil Ihre Elemente in Frames sind. Nun, Selen bietet eine ganze Reihe von Funktionen, um mit Frames umzugehen. Siehe this für Selen auf Python.

Bevor Sie also andere Elemente auswählen, müssen Sie das entsprechende Bild auswählen und zu diesem wechseln. Zum Beispiel:

driver.switch_to_default_content() 
driver.switch_to_frame("ENTETE_WIN") 

sind Sie in der linken Frame wechseln (die erste Anweisung stellt sicher, dass Sie auf „main“ Fenster sind mit zu beginnen). Oder

driver.switch_to_default_content() 
driver.switch_to_frame("BODY_WIN") 

, um zum rechten Frame zu wechseln.

Alle anderen HTML-Elemente befinden sich in diesen Frames, so dass Sie sie mit normalen xpath, css und anderen Selektoren auswählen können.

+0

Vielen Dank! Du hast mein Problem genau gelöst !!!! – user2789928