я пытаюсь сделать небольшой инструмент, который загружает все изображения с посещаемого сайта. Это должно быть сделано с компонентом twebbrowser. Тестовый сайт моего клиента — Click. На данный момент я выбираю изображения с помощью getelementbyid, но у некоторых изображений нет идентификатора. Как я могу обратиться к пропавшим? Большое спасибо
Соскребание изображений с веб-сайта в delphi с помощью twebbrowser
Ответы (2)
После загрузки страницы запросите свойство TWebBrowser.Document
для интерфейса IHTMLDocument2
, а затем вы можете перечислить элементы коллекции IHTMLDocument2.images
:
var
Document: IHTMLDocument2;
Images: IHTMLElementCollection;
Image: IHTMLImgElement;
I: Integer;
begin
Document := WebBrowser1.Document as IHTMLDocument2;
Images := Document.images;
For I := 0 to Images.length - 1 do
begin
Image := Images.item(I, '') as IHTMLImgElement;
// use Image as needed...
end;
end;
Обратите внимание, что изображения будут найдены только в HTML-тегах <img>
. Если вам нужно найти изображения и в тегах <input type="image">
, вам придется перечислить элементы IHTMLDocument2.all
ищет экземпляры интерфейса IHTMLInputElement
чье свойство type
равно "image"
, например:
var
Document: IHTMLDocument2;
Elements: IHTMLElementCollection;
Element: IHTMLElement;
Image: IHTMLImgElement;
Input: IHTMLInputElement;
I: Integer;
begin
Document := WebBrowser1.Document as IHTMLDocument2;
Elements := Document.all;
For I := 0 to Elements.length - 1 do
begin
Element := Elements.item(I, '') as IHTMLElement;
if Element is IHTMLImgElement then begin
Image := Element as IHTMLImgElement;
// use Image as needed...
end
else if Element is IHTMLInputElement then begin
Input := Element as IHTMLInputElement;
if Input.type = 'image' then
begin
// use Input as needed...
end;
end;
end;
end;
Вместо того, чтобы запрашивать определенный элемент по идентификатору, вы можете «пройтись» по документу и просмотреть каждый элемент, используя WebDocument.all.item(itemnum,'').
var
cAllElements: IHTMLElementCollection;
eThisElement: IHTMLElement;
WebDocument: IHTMLDocument2;
=======
cAllElements:=WebDocument.All
For iThisElement:=0 to cAllElements.num-1 do
begin
eThisElement:=cAllElements.item(iThisElement,'') as IHTMLElement;
// check out eThisElement and do what you want
end;
Затем вы должны просмотреть элемент .tagName для IMG или выполнить любую необходимую вам оценку, чтобы определить, является ли это изображением, и обработать его, как вы делали это раньше.
Дэн
images
документа будет более простым, чем обход коллекции all
.
- person Remy Lebeau; 24.05.2016