Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2016, 20:04   #1
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию Как удалить элемент в HTML из WebBrowser с определенным стилем?

Привет.

Пишу скринер сайтов. Проблема заключается в том, что у сайта, при его посещении, выскакивает на весь экран уведомление.

Пример:


Как его убрать не привязываясь к какому-то конкретному сайту?! Например, можно удалять из HTML все блоки у которых z-index больше 1000.

Но каким образом это можно сделать, есть идеи?
bilibian вне форума Ответить с цитированием
Старый 16.05.2016, 20:08   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

С помощью JS.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 16.05.2016, 20:13   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы не думали взять готовый phantomJS который это все умеет?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.05.2016, 08:04   #4
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Вот, набросал код.

Код:
    
  var
    elem: Variant;
    I : Integer;
begin
  elem := wb1.OleObject.document.getElementsByTagName('div');

  for I := 0 to elem.length -1 do
    if elem.item(I).style.zIndex >= 1000 then
       elem.item(I).style.display := 'none';
Проблема в том, что тип zIndex не Integer. В результате получаю ошибку "could not convert variant of type (olestr) into type (double)".

Есть решение?
bilibian вне форума Ответить с цитированием
Старый 17.05.2016, 08:17   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Конвертировать строку в число.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.05.2016, 08:51   #6
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Конвертировать строку в число.
Код:
if StrToInt( elem.item(I).style.zIndex ) >= 1000 then
is not valid integer value
bilibian вне форума Ответить с цитированием
Старый 17.05.2016, 09:11   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что в zIndex находится? Может там не целое число, или пустая строка.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 17.05.2016 в 09:20.
Alex11223 вне форума Ответить с цитированием
Старый 17.05.2016, 09:44   #8
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Что в zIndex находится? Может там не целое число, или пустая строка.
С этим вопрос решен. В принципе сейчас все работает, только вместо скрытия элемента, нужно его удалить. Это связано с тем, что некоторые элементы не скрываются, в случае, если к ним уже были применены стили display! Например: display:block;

Код:
  var
    elem: Variant;
    I, zIndex: Integer;
begin
  elem := wb1.OleObject.document.getElementsByTagName('div');

  for I := 0 to elem.length -1 do begin
    zIndex := StrToIntDef(elem.item(I).style.zIndex, 0); // если не число, то будет равно "0"
    if zIndex >= 500 then elem.item(I).style.display := 'none';
  end;

Последний раз редактировалось bilibian; 17.05.2016 в 10:29. Причина: upd
bilibian вне форума Ответить с цитированием
Старый 17.05.2016, 16:15   #9
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Делаю так, но удалить элемент не получается.

Код:
  var
    doc: Variant;
    I, zIndex: Integer;
begin
  doc := wb1.OleObject.document;

  for I := 0 to doc.all.length -1 do begin
    zIndex := StrToIntDef(doc.all.item(I).style.zIndex, 0); // если не число, то будет равно "0"
    if zIndex >= 500 then doc.parentNode.removeChild( doc.all.item(I) );
  end;
error: invalid variant operation

Что я делаю не так?

Последний раз редактировалось bilibian; 17.05.2016 в 16:19.
bilibian вне форума Ответить с цитированием
Старый 17.05.2016, 16:23   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Дык вам parent не doc'а нужен.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С,С++, как удалить элемент списка? Алексей_2012 Помощь студентам 5 11.06.2015 10:38
как удалить n-ый элемент вектора? Tiva Помощь студентам 1 09.11.2012 20:28
Как удалить элемент массива? БалаШагаЛ PHP 1 28.01.2012 20:46
Как удалить, определённый элемент из стринггрида? Lenux Помощь студентам 3 14.03.2010 18:57
Как удалить кэш и куки в webbrowser OkeaH Работа с сетью в Delphi 2 15.02.2009 16:58