◆参考
C#か何かのサイトを参考にしながら。
ameblo.jp
◆よし!pythonで書くぞ!
def _addEventListenerToIETab(self,ieTab,pageId): # IHTMLのポインタ型を定義 pDoc2 = POINTER(IHTMLDocument2)() pElement = POINTER(IHTMLElement)() pElement2 = POINTER(IHTMLElement2)() # ウインドウハンドルからIHTMLDocument2ポインタ(pDoc2)を取得 pDoc2 = self._getDoc2FromHandle(ieTab.handle) # Script型のDOMを生成して、IHTMLElementポインタ(pElement)に割り当てる pDoc2._IHTMLDocument2__com_createElement('SCRIPT',byref(pElement)) # TBD pElement.setAttribute('language', 'JavaScript') pElement.setAttribute('type', 'text/JavaScript') pElement._IHTMLElement__com__set_innerText('alert();') # ページのbodyをIHTMLElement2ポインタ(pElement2)に割り当てる pDoc2.body._IUnknown__com_QueryInterface(byref(IHTMLElement2._iid_),byref(pElement2)) # ページのbody(pElement2)の最終行直前の位置(beforeend)にScript型のDOM(pElement)を挿入する。 pElement2.insertAdjacentElement('beforeend',pElement) return True
pythonでMSHTMLやるときは、普段なら"_IHTMLElement2__com_insertAdjacentElement"を使いそうなものなのですが、これを使おうと思うとパラメーターが3つ必要らしく、「3つって、何?」か分からず、断念。普通に"insertAdjacentElement"を使ったら、パラメーター2つでSCROPTタグをインサートできました。
ちなみに、IEでf12を押してDOMを見ながらプログラムを動かすと、添付のキャプチャのようにリアルタイムでDOMが追加されていくのがわかって、面白いです。
画面の上がafterbeginで、下がbeforeendです。
参考にしたリンク先の説明の通り、frameset問題は気になるので、当面はbeforeendでやってみよう。
【追記】⇒ どうやらframesetがある場合は、framesetの中のbeforeendにIEが勝手に配置してくれる模様。凄い!そもそもframesetについて勉強したページも貼っておきます。
serverless.hateblo.jp
◆参考:マイクロソフト:insertAdjacentElement
insertAdjacentElement method (Windows) | Microsoft Docs