2016-11-18 9 views
1

Delphi XE10(VCL)のTWebBrowserコンポーネントに表示されているWebサイトから画像を削除する必要があります。検索に何時間も費やしていましたが、たくさんのコードを試しましたが、私が望むように動作していません。TWebBrowser内のアクティブなHTMLから特定のIMGタグを削除

これは私のコードの抜粋です:

procedure TForm16.WebBrowser1DocumentComplete(ASender: TObject; 
    const pDisp: IDispatch; const [Ref] URL: OleVariant); 
var 
    Doc: IHTMLDocument2; 
    ElementCollection: IHTMLElementCollection; 
    Frames: IHTMLElementCollection; 
    Element: IHTMLElement; 
    Frame: IHTMLDOMNode; 
    i: Integer; 
begin 
    Doc := WebBrowser1.Document as IHTMLDocument2; 
    ElementCollection := Doc.body.all as IHTMLElementCollection; 
    Frames := ElementCollection.tags('IMG') as IHTMLElementCollection; 
    if Frames <> nil then 
    begin 
    for i := 0 to Frames.length - 1 do 
    begin 
     Element := Frames.item(i, 0) as IHTMLElement; 
     Frame := Element as IHTMLDOMNode; 
     if Frame <> nil then 
     begin 
     Frame.parentNode.removeChild(Frame); 
     end; 
    end; 
    end; 

end; 

残念ながら、それはすべての画像が削除されます。特定のHREFを持つ特定のイメージを削除したい。これで私を助けることができますか?

+0

これらをすべてループしてすべて削除します。なぜあなたはそのうちの1つだけを削除したいのですか? –

+0

ありがとうございます。 –

+0

私はhref = 'exp.com/exp.png'を持っているimgノードを削除することができるように、それらのすべてをループすることはしませんが、私はそれをどのように実現できるのかわかりません –

答えて

1

srcまたはhref属性の後ろにあるかどうかはわかりません。
私はあなたが実際にsrcを意味していると仮定します(IMGタグでhrefの使用を認識していません)。そうでない場合は、srchrefに置き換えてください。

基本的にコードは問題ありません。例:IHTMLElementの属性を確認できます。

私は例えば src/ href特性を有している IHTMLDocument2.images直接収集と IHTMLImgElement使用することをお勧め
if Element.getAttribute('src', 0) = 'something' then ... 

:私はので、私たちならば後方

for I := Images.length - 1 downto 0 do 

をDOMを反復してい

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; 
    const pDisp: IDispatch; var URL: OleVariant); 
var 
    Doc: IHTMLDocument2; 
    Images: IHTMLElementCollection; 
    Img: IHTMLImgElement; 
    Node: IHTMLDOMNode; 
    Src: WideString; 
    I: Integer; 
begin 
    Doc := TWebBrowser(Sender).Document as IHTMLDocument2; 
    if Assigned(Doc) then 
    begin 
    Images := Doc.images; 
    for I := Images.length - 1 downto 0 do 
    begin 
     Img := Images.item(I, 0) as IHTMLImgElement; 
     if Img.src = 'http://foo.bar/my.png' then // or "Img.href" 
     begin 
     Node := Img as IHTMLDOMNode; 
     Node.parentNode.removeChild(Node); 
     Break; // optional 
     end; 
    end; 
    end; 
end; 

注意を1つ以上のノードを削除する必要があります。前のノードのインデックスを削除した後、次のノードのインデックスを失うことはありません。

関連する問題