Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Всем доброго времени суток. Задался я такой задачей. Как сделать так чтоб браузер открывал страницу но не полностью. то есть есть код страницы (длинный писать не буду) и надо чтоб вот этот элемент не отображался на всех открываемых страницах браузера.
Code
<div id="hidemead" style="display:block;position:relative;border-bottom:1px solid #7D8891"><a href="http://hideme.ru/vpn/" target="_blank" style="display:block;width:100%;height:123px;background:url('http://hideme.ru/images/prx/prx_bnr_3.png') center top repeat-x"></a><a href="javascript:document.getElementById('hidemead').outerHTML='';void(0)" style="position:absolute;top:5px;right:10px;font-weight:bold">Close ad</a></div>
//Отредактировано администратором Нарушение пункта 9 раздела III и пункта 6 раздела IV Правил форума.
Vladlen, если хочешь получить пример, то нужно давать ссылку на сайт. В данном случае легче объяснить на примере чем на "пальцах".
1. Нужно получить в переменную весь код страницы. InternetGet 2. Найти и удалить командами для работы со строками текст который не нужен. 3. Загрузить в браузер обработанный код.BrowserLoadFromStr Не хочешь читать хелп?
.Если хотим что бы код загрузился без сообщенй об ошибке если сервер загружен ставим ShowErrors "False" :1 InternetGet "http://uff2dhy3chxlrhtu.owl.e.s3.hideme.ru/" "[Get]" "" .Если сервер загружен пробуем опять, но лучше попробовать позже.... If "[LastError]" "<>" "" GotoLine ":1" EndIf ShowErrors "True" .Требуется плагин zmFunctions конвертируем из Utf8 в Ansi zmConvertString "Utf8ToAnsi" "[Get]" "[Get]"
Дальше уже поиск нужного текста. У меня не загружается такой текст. Но по факту это уже работа со строками. И здесь что бы понять нужно постараться самому разобраться.
Можно конечно упростить, и попробовать удалить этот текст.
Code
StrReplace "[Get]" "<div id=[#34]hidemead[#34] style=[#34]display:block;position:relative;border-bottom:1px solid #7D8891[#34]><a href=[#34]http://hideme.ru/vpn/[#34] target=[#34]_blank[#34] style=[#34]display:block;width:100%;height:123px;background:url('http://hideme.ru/images/prx/prx_bnr_3.png') center top repeat-x[#34]></a><a href=[#34]javascript:document.getElementById('hidemead').outerHTML='';void(0)[#34] style=[#34]position:absolute;top:5px;right:10px;font-weight:bold[#34]>Close ad</a></div>" "" "[Get]" ""
После либо конвертнуть обратно в Utf8 либо загрузить так как есть
Code
BrowserLoadFromStr "WebBrowser1" "[Get]"
Примерно так. Можно что то усложнить, что то упростить, но направление есть. Разбирайся.
Quote (mishem)
Можно конечно упростить, и попробовать удалить этот текст.
Дело в том что если хоть один знак будет не соответствовать, то при таком подходе ничего не удалиться. По хорошему нужно найти начало искомого текста и конец. И по номерам найденных символов удалить все что между ними.
Добавлено (02 Декабря 2012, 16:59) ---------------------------------------------
Quote (mishem)
то нужно давать ссылку на сайт.
Quote (mishem)
Нарушение пункта 9 раздела III
Только сейчас обратил внимание. Я забыл. Хотя вот тот случай о котором я когда то говорил. Для того что бы понять как лучше сделать, нужна ссылка. Хотя... От нее все равно в данном случае толку ноль. Зато я правила почитал.
mishem, да это то что надо. только вот почему то он не загружет страницу. вот если BrowserGoTo "WebBrowser1" "http://uff2dhy3chxlrhtu.owl.e.s3.hideme.ru/" тогда заходит а вот так InternetGet "http://uff2dhy3chxlrhtu.owl.e.s3.hideme.ru/" "[Get]" "" ошибка 404. как можно с этим разобраться?
Ты ж на свою страницу заходишь где уже зареген. На компе есть куки с которых читаются данные, а так тебе надо еще сначала зарегиться. Как это делается, ищи на форуме. Не хочешь читать хелп?
нет, я понял всё дело в том что у меня интернет через прокси сервер, и поэтому не могу получить. Я даже ping в командной строке кроме локального, сделать не могу из за этих прокси.
Я так понял что тебе необходимо скрыть верхнюю рекламу, реализовать это не сложно. Для сайта hideme.ru достаточно всего 3-х строчек кода.
.Загружаем страницу сайта в переменную InternetGet "http://uff2dhy3chxlrhtu.owl.e.s3.hideme.ru/" "[LoadHTML]" "HideProgress+Async" .Изменяем значение дисплея с blok на none тем самым полностю скрываем его для отображения StrReplace"[LoadHTML]" "display:block;position:relative;border-bottom:1px solid #7D8891" "display:none;position:relative;border-bottom:1px solid #7D8891" "[LoadHTML]" "" .Загружаем измененный код в web объект. BrowserLoadFromStr "Web" "[LoadHTML]"
Однако, динамичности ты не добьешься... Я догадываюсь, что ты хочешь сделать, чтобы при переходе по ссылкам в окне самописного браузера-клиента одноклассников, блок рекламы всегда был скрыт. Но neobook не умеет встраиваться в открытую URL страницу, иными словами вся работа с html производится с копией страницы которую neobook создает командой InternetGet из за чего ряд сылок в утилите в такой копии требует правки, так как имеет "относительный" вид: /cdk/st.cmd/anonymMain/tkn/9136?st._aid=MRGT_ok вместо "постоянного": http://uff2dhy3chxlrhtu.owl.e.s3.hideme.ru/cdk/st.cmd/anonymMain/tkn/9136?st._aid=MRGT_ok
Плюс потребуется каким то образом заставить скрипт скрытия блока рекламы работать вместо стандартного перехода по нажатию на ссылку в Web объекте. В теории это должно реализовываться через Before Navigate web объекта, но почему то не реализовывается... Не работает короче... получается бешеный неконтролируемый цикл. Страница нцать раз обновляется, лезут ошибки, вообщем жуть. Хотя в принципе это можно решить, через ряд костылей, например встраивая в html код Neobook команды.
Да еще от себя замечу что сама функция InternetGet работает не всегда и не совсем корректно. По сути ей для нормального функционирования требуется не просто ссылка сайта типа: httр://uff2dhy3chxlrhtu.owl.e.s3.hideme.ru/ а ссылка на конкретный файл типа: httр://uff2dhy3chxlrhtu.owl.e.s3.hideme.ru/index.html , что не всегда возможно...
Добавлено (03 Декабря 2012, 13:08) --------------------------------------------- Я тут еще подумал и вспомнил про замечательную функцию Neobook: BrowserExecScript В теории скрытие блока можно реализовать через javascript - я не специалист в нем, так что, как говорится,- DEMBEL в помощь. Если конечно он согласиться...
"Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
Сообщение отредактировано anton - Пн, 03 Декабря 2012, 12:54
есть анонимайзеры и без особой рекламы, поищи еще. хидеме часто перегружен и лезут ошибки 404, 503 или вообще:
Quote
Превышен лимит нагрузки Текущая нагрузка 3.25. Для бесплатного использования максимальная нагрузка 2.00. Для снятия данного ограничения используйте премиум-аккаунт. Если у вас уже есть премиум-код, то убедитесь, что вы авторизованы в системе. Напишите нам, если у вас есть какие-либо вопросы.
и да, про InternetGet забудь, в данном случае лучше весь серфинг вести самим браузером.
еще момент - скорее всего, cookies не будут работать через прокси. поэтому нек. сайты могут послать подальше, тогда мобильная версия только пашет.
например есть вариант: _http://anonymouse.org/cgi-bin/anon-www.cgi/http://m.od***ki.ru/ чтобы скрывать блок рекламы в событие браузера NavigateComplete (посл. вкладка) пишем: BrowserExecScript "Web" "document.getElementById('mouselayer').style.visibility='hidden'" "JScript"
чтобы скрыть блок hideme пишем: BrowserExecScript "Web" "document.getElementById('hidemead').outerHTML=''" "JScript" либо аналогично ... ('hidemead').style.visibility='hidden'" "JScript" но тогда пустое место останется
Добавлено (03 Декабря 2012, 14:23) ---------------------------------------------
Quote (anton)
Плюс потребуется каким то образом заставить скрипт скрытия блока рекламы работать вместо стандартного перехода по нажатию на ссылку в Web объекте. В теории это должно реализовываться через Before Navigate web объекта, но почему то не реализовывается...
повторять или подменять все то что происходит в браузере при загрузке, переходам и т.п. не получится, да и не нужен этот геморой не связывайтесь. загрузилась страница, потом скриптом делай с ней что хочешь. Как задавать вопросы
повторять или подменять все то что происходит в браузере при загрузке, переходам и т.п. не получится, да и не нужен этот геморой не связывайтесь. загрузилась страница, потом скриптом делай с ней что хочешь.
Согласен полностью.
Кстати не подскажешь почему вот такой вариант не работает в необок... выдает ошибку.
BrowserExecScript "Web" "document.getElementById('hidemead').style.display='none'" "JScript" "Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
попробуй прямо в твоем IE браузере в адресной строке (после открытия сайта с hideme есс-но) запустить этот скрипт для страницы через javascript: будет ли ругаться. Так магическим образом можно нафиг выносить все что угодно со страницы вживую в обычном браузере:
javascript:document.getElementById('hidemead').style.display="none";undefined Как задавать вопросы
Пока пользователь не нажмёт на другую кнопку (там их только 2) скрипт вечно пытается закрыть рекламу. Премиум коды у меня есть. И если кому надо могу поделиться...
Пока пользователь не нажмёт на другую кнопку (там их только 2)
судя по коду, кнопки эти "Одноклассники" и "Вконтакте" вообще, зря ты этот вечный цикл написал, никому никогда не показывай, распнут сразу. лучше подумать и пойти логическим путем. Даже столь любимый тут многими балбесами таймер на 100мс и то "правильнее" выглядит в подобном случае. Как задавать вопросы
Добавлено (05 Декабря 2012, 13:14) ---------------------------------------------
сделал через setInterval, т.е. если блок не очистится по каким либо причинам с 1 раза, то проверяем каждую секунду и очищаем (убив setInterval после зачистки).
Не особо искал ответ "почему". document-объект локальный, а window-глобальный Если в WebBrowser не найдена переменная document.объект, то ошибка. Если же указать window.объект/window.document.объект, то если объект реально существует, то ошибки не будет. Подозреваю, что баг в WebBrowser или же "особенность IE" А, try{...}catch(e){...}, подстраховка, на всякий случай. кстати, очень полезная функция!
DEMBEL, неплохая идея про 100мс. так гораздо грамотней. Вот исходник кому интересно
Ну допустим... А зачем ты для VK используешь https? "Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
Понятно, ваши мегасисадмины не блочат 443 порт для VK.... Я над ними в покате валяюсь!!!! "Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
То есть, я так понимаю, чтобы загрузить не всю страницу, а только, например, таблицу с этой страницы или определенный текстовый блок то необходимо применять JScript? Неужели нельзя очистить только средствами NeoBook? Или наоборот, не очищать, а загружать только нужный блок. Насколько я разбираюсь в HTML разные блоки ограничены тэгами с идентификаторами. Может есть возможность загружать только тот блок, который ограничен определенным тэгом?
вы не осознали смысла применения js в данном случае
Цитата (sindo)
То есть, я так понимаю, чтобы загрузить не всю страницу, а только, например, таблицу с этой страницы или определенный текстовый блок то необходимо применять JScript?
все зависит от конечной цели которую вы преследуете. Вкратце, если вам нужно тупо выдрать табличку с хтмл страницы, вы берете ответ сервера, вырезаете средствами нб нужный кусок, грузите и отображаете (browserloadfromstr) в браузере. Если вам нужна рабочая "живая" хтмл страничка, то вы подобное так не делаете, а используете только то, что и предназначено для динамического изменения на лету содержимого страницы, а именно js. Иначе страница (или процесс серфинга, как в данном случае топикстартера) может не работать правильно. Как задавать вопросы
Мне не нужна "живая" страница. А просто кусок статической страницы, ограниченной тегами. Но информация в этом "куске" периодически меняется. Названия тегов остаются неизменными. Обратного взаимодействия не предвидеться. Не запросов, не ввода паролей. Надо, ну например для очистки от рекламы или ненужной информации. 1. Возможно ли данное без применения js 2. Если да, то направьте в каком направлении искать, какими командами очистить хтмл или наоборот загрузить нужный кусок, скажем так - от тега <111> до тега </111>. С тем как загрузить страницу в переменную и как вручную загрузить хтмл код в браузер (browserloadfromstr) в принципе разобрался. А вот между этими действиями проблема по очистке кода.