クラス名を持つ要素から InnerText を取得するにはどうすればよいですか?
<div class="SomeClass" style="text-align: left; display: block;"></div>
<div class="SomeClass" style="text-align: left; display: block;">Sometext</div>
クラス名を持つ要素から InnerText を取得するにはどうすればよいですか?
<div class="SomeClass" style="text-align: left; display: block;"></div>
<div class="SomeClass" style="text-align: left; display: block;">Sometext</div>
わかりましたクラスは、おそらく複数のTstringListを使用する必要があります。私はあなたのために関数を作成しました:
function GetInnersByClass(const Doc: IDispatch; const classname: string;var Lst:TStringList): Integer;
var
Document: IHTMLDocument2; // IHTMLDocument2 interface of Doc
Body: IHTMLElement2; // document body element
Tags: IHTMLElementCollection; // all tags in document body
Tag: IHTMLElement; // a tag in document body
I: Integer; // loops thru tags in document body
begin
Lst.Clear;
Result := 0 ;
// Check for valid document: require IHTMLDocument2 interface to it
if not Supports(Doc, IHTMLDocument2, Document) then
raise Exception.Create('Invalid HTML document');
// Check for valid body element: require IHTMLElement2 interface to it
if not Supports(Document.body, IHTMLElement2, Body) then
raise Exception.Create('Can''t find <body> element');
// Get all tags in body element ('*' => any tag name)
Tags := Body.getElementsByTagName('*');
// Scan through all tags in body
for I := 0 to Pred(Tags.length) do
begin
// Get reference to a tag
Tag := Tags.item(I, EmptyParam) as IHTMLElement;
// Check tag's id and return it if id matches
if AnsiSameText(Tag.className, classname) then
begin
Lst.Add(Tag.innerHTML);
Inc(Result);
end;
end;
end;
結果は、それぞれ関数を持つクラスの数です
そして、あなたはこのサンプルでそれを使用することができます:
var
lst : TStringList;
begin
//
lst := TStringList.Create;
GetInnersByClass(wb1.Document,'SameClass',lst);
ShowMessage(lst.Text);
lst.Free;
end;
MSHTML ユニットを本体に追加することを忘れないでください。
こんにちは、HTML doc で値を検索するには、同じ id という特別なプロパティが必要です。
重要な特殊財産です。
たとえば、この関数を使用して内部テキストを見つけることができますが、 id を使用します。
function GetInnerElementById(const Doc: IDispatch; const Id: string): WideString;
var
Document: IHTMLDocument2; // IHTMLDocument2 interface of Doc
Body: IHTMLElement2; // document body element
Tags: IHTMLElementCollection; // all tags in document body
Tag: IHTMLElement; // a tag in document body
I: Integer; // loops thru tags in document body
begin
Result :='';
// Check for valid document: require IHTMLDocument2 interface to it
if not Supports(Doc, IHTMLDocument2, Document) then
raise Exception.Create('Invalid HTML document');
// Check for valid body element: require IHTMLElement2 interface to it
if not Supports(Document.body, IHTMLElement2, Body) then
raise Exception.Create('Can''t find <body> element');
// Get all tags in body element ('*' => any tag name)
Tags := Body.getElementsByTagName('*');
// Scan through all tags in body
for I := 0 to Pred(Tags.length) do
begin
// Get reference to a tag
Tag := Tags.item(I, EmptyParam) as IHTMLElement;
// Check tag's id and return it if id matches
if AnsiSameText(Tag.id, Id) then
begin
Result := Tag.innerHTML;
Break;
end;
end;
end;
「MSHTML」ユニットを使用する必要があります...
そしてあなたはサンプルでそれを使うことができます:
</head>
<body>
<div id="TESTID">sametext</div>
</body>
ShowMessage(GetElementById(wb1.Document,'TESTID'));
SomeClass を使用する必要がある場合は、新しい機能を提供することを教えてください....