はじめまして、よろしくお願いします。
WebBrowserで表示しているページからHTMLソースを取得するにはどうすればいいのでしょうか?
Memo1.Text:=WebBrowser1.OleObject.Document.documentElement.innerHTML;を用いて取得してこようと試みたのですが、HTMLソースの一部のみ取得してきているようで、HTMLソース全部を取得することができません。
HTMLソースをすべて取得するにはどのような方法があるのでしょうか?
>HTMLソースをすべて取得するには...
「すべて」というのは、どこからどこまで?
>ばつ様
<html>から</html>までを取得してきたいのです。
何かアドバイスありましたら、よろしくお願いします。
OuterHTMLでしょ。
>それなら...様
アドバイスありがとうございます。
OuterHTMLも試したのですが、OuterHTMLでは<body>の部分が抜けてしまうのです。
私が取得したいのは、googleの検索結果のHTMLソースなのですが、、
HTMLソースをすべて取得できない状態なのです。
ほかに何かアドバイスありましたらよろしくお願いします。
> ...<body>の部分が抜けてしまうのです。
innerHTMLでもOuterHTMLでも そんなことないよ。
INNER は <HEAD> から OUTER は <HTML> から取れるけどね
IEのバージョンによってそんなバグでもあるのかな?
WebBrowser を使わなくても良いのなら
StringList.Text := IDHTTP1.Get('http://www.google.co.jp/search?hl=ja&q='+HTTPEncode(Edit1.Text)+S+S2);
なんてやりかたでも HTML を取得する事はできますが
https://www.petitmonte.com/bbs/answers?question_id=5234
みたいのを作ろうとしているのかな?
>ほんとに?様
私が行った結果なのですが、innerHTML、OuterHTMLの両方ともHTMLソースの一部分が抜けてしまっています。
どのようなことが原因なのでしょうか?
環境等も関係しているのでしょうか!?
質問ばかりですみませんが、アドバイスいただけるとありがたいです。
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
Memo1.Text:=WebBrowser1.OleObject.Document.documentElement.innerHTML;
end;
この中で取得していないとか?
>KHE00221様
アドバイスありがとうございます。ご指摘頂いた通りでした。
本当に初歩的なミスを起こしてしまいすみませんでした。
KHE00221様が書いていたURLのページは以前参照させてもらいました。
やりたいことはよく似ています。私も検索結果からURLのみを取得したいと思っています。
URLのページに記載していましたプログラムは、ディスク上に保存した google の検索結果を対象にしているようですが、
Memo1.Text:=WebBrowser1.OleObject.Document.documentElement.innerHTML;
で取得したHTMLソースでも実行できるのでしょうか?
IEから取得したものと記述が少し違っている様なのですが・・・
何かアドバイス等ありましたら、よろしくお願い致します。
からダウンロードしてごらん ソースついてるから
WebBrowserでなく IDHTTP で取得しているけど (googleの画面を表示する必要は無いので)
>KHE00221様
プログラム非常に参考になりました!!すごいですね。
確かにこのプログラムなら、googleの画面を表示する必要はないですね!
私の場合、WebBrowserをなんとか使ってURLを取得したいんですが、、
以前KHE00221様が記述しているプログラムは保存したHTMLからURLを取得してきていますよね?
J1 := PosEx('<h2 class=r>',S,Index);の部分からURLを取得するための処理を行っているのではないでしょうか!?
この部分を変更すれば、IEから取得したものと記述が違っていても、URLを取得することができないのでしょうか?
それか、IEと同じようなHTMLソースを取得する方法は何かないでしょうか?
図々しい質問ばかりで申し訳ありませんが、アドバイスお願い致します。
そのままコピーして使用する事はできませんが、判定文字列を多少
変更すればタイトル、URLの取得する事は可能です
var
URL,TITLE : array of String;
Count,MaxCount : Integer;
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL2: OleVariant);
var
StringList : TStringList;
I,I2,J1,J2,J3,J5,Index : Integer;
S,S1 : String;
F0,F1 : Boolean;
begin
StringList := TStringList.Create;
StringList.Text:=WebBrowser1.OleObject.Document.documentElement.OuterHTML;
Count := 0;
for I:=0 to StringList.Count -1 do
begin
Index := 1;
S := StringList[I];
F0 := False;
while F0 = False do
begin
F0 := True;
J1 := PosEx('<H2 class=r>',S,Index);
if J1 <> 0 then
begin
J2 := PosEX('href="',S,J1+12);
if J2 <> 0 then
begin
J3 := PosEx('">',S,J2+6);
if J3 <> 0 then
begin
SetLength(URL,Count+1);
S1 := Copy(S,J2+6,J3-J2-6);//URL 取得
//同一のURLが登録されているか確認
F1 := False;
for I2 := 0 to Count-1 do
begin
if URL[I2] = S1 then F1 := True;
end;
//同一のURLが登録されていない場合
if F1 = False then
begin
URL[Count] := S1;
J5 := PosEx('</A>',S,J3+2);
if J5 <> 0 then
begin
//TITLE登録
SetLength(TITLE,MaxCount+1);
TITLE[Count] := Copy(S,J3+2,J5-J3-2); //TITLE取得
//TITLEから <b> と </b> を 削除
J1 := Pos('<B>',TITLE[Count]);
while J1 <> 0 do
begin
if J1<> 0 then
begin
TITLE[Count] := Copy(TITLE[Count],0,J1-1) + Copy(TITLE[Count],J1+3,Length(TITLE[Count])-J1-2);
J1 := Pos('</B>',TITLE[Count]);
if J1 <> 0 then
begin
TITLE[Count] := Copy(TITLE[Count],0,J1-1) + Copy(TITLE[Count],J1+4,Length(TITLE[Count])-J1-3);
end;
end;
J1 := Pos('<B>',TITLE[Count]);
end;
Index := J5;
F0 := False;
end;
Inc(Count);
if MaxCount < Count then MaxCount := Count;
end;
end;
end;
end;
end;
end;
StringList.Free;
end;
>KHE00221様
お返事が遅くなり申し訳ありません。プログラムまで記述して頂き本当にありがとうございます。
まだ頂いたプログラムを試せてはいないのですが、KHE00221様が書いていたURLのページのプログラムを参照しながらURLを取得してみたいと思います。
そのプログラムにも適用できると思っているのですが、、どうですか?
あと、今回書かれたプログラムの(J1+12)や(J2+6)の部分はどのような処理を行っているのでしょうか?この部分がよく理解できなくて。。
また質問ばかりですみませんが、よろしくお願い致します。
PosEx('ABCDE',S) は先頭の位置を返すので
調べた文字数を足して文字の後ろから検索をかけているだけです
>KHE00221様
またお返事が遅くなりました。申し訳ありません。
頂いたプログラムを実行したところ、URLを取得することができました。
度重なる質問にも親切にお答え下さって、本当にありがとうございました。
ツイート | ![]() |