Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
1

Поиск ссылок в WebBrowser-е

22.09.2015, 19:12. Показов 2350. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Есть программа написанная пол года назад.
Часть кода.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
while true do
    begin
    Application.ProcessMessages;
 
    st_pos:= PosEx('<div class="b-history-event__share-text_description"><a href="http://my.mail.ru/apps/710278',s,st_pos)+Length('<div class="b-history-event__share-text_description"><a href="');
 
    if (st_pos <= 100) then break;
 
    end_pos:= PosEx('"',s,st_pos);
    link:= Copy(s,st_pos,end_pos-st_pos);
    link:= StringReplace(link,'','',[rfReplaceAll]);
    is_present:= false;
    for i:= 0 to lnk_skipped.Count-1 do
    if lnk_skipped[i]= link then
    begin
    is_present:= true;
    break;
    end;
    if is_present then continue;
    lnk_skipped.Add(link);
    lnk_skipped.SaveToFile(ExtractFilePath(Application.ExeName)+'links_skipped.txt');
    ListBox1.Items.Add(link);
    Label4.Caption:= DateTimeToStr(today);       // Время отображение последней загруженной ссылки
В данной части кода, программа ищет в встроенном браузере на странице ссылки:

Delphi
1
st_pos:= PosEx('<div class="b-history-event__share-text_description"><a href="http://my.mail.ru/apps/710278',s,st_pos)+Length('<div class="b-history-event__share-text_description"><a href="');
И найдя такие, переходит по ним.

Подскажите, как сделать чтобы программа искала еще и 2 ссылку, т.е.

Или такую:
st_pos:= PosEx('<div class="b-history-event__share-text_description"><a href="http://my.mail.ru/apps/710278',s,st_pos)+Length('<div class="b-history-event__share-text_description"><a href="');

или такую:
st_pos:= PosEx('<div class="b-history-event__share-text_description"><a href="https://my.mail.ru/apps/710278',s,st_pos)+Length('<div class="b-history-event__share-text_description"><a href="');

и найдя нужную, так же переходила по ней...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2015, 19:12
Ответы с готовыми решениями:

Перехват нажатий ссылок в WebBrowser
Решил перефразировать т.к идея чуть сменилось , а принцип тот же и создавать кучку тем не охото...

Реализовать открытие ссылок в Webbrowser, а не IE
При открытии ссылок с компонента Webbrowser они открываются не в форме, а в IE (internet Explorer)....

Открытие ссылок в текущем объекте WebBrowser
Всем привет, я пишу программу, где используется в форме элемент webbrowser, при нажатии кнопки...

Правильный парсинг ссылок со страницы в WebBrowser
Вот мой фигокод: Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles...

10
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
22.09.2015, 23:52 2
Цитата Сообщение от oniava Посмотреть сообщение
Подскажите, как сделать чтобы программа искала еще и 2 ссылку, т.е.
Что-то ты много написал..
Вот такой код у меня находит все ссылки http:// и https:// со страницы которую загрузил в Memo1
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
var
  r: TRegExpr;
begin
  Memo2.Clear;
  r := TRegExpr.Create;
  r.InputString := Memo1.Text;
   r.Expression := '((http|https)://.*?)"';
  if r.Exec then
    repeat
      Memo2.Lines.Add(r.Match[1]);
    until not r.ExecNext;
end;
Цитата Сообщение от oniava Посмотреть сообщение
и найдя нужную, так же переходила по ней...
Сохраняй в TStringList и кликай на нее или на них хоть пачками программно при помощи компонента IdHttp

Цитата Сообщение от oniava Посмотреть сообщение
В данной части кода, программа ищет в встроенном браузере на странице ссылки:
В каком встроенном браузере? если ты про компонет WebBrowser то там еще проще ссылки с загруженной в него страницы собрать.
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
23.09.2015, 05:36  [ТС] 3
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
Что-то ты много написал..
У меня программа уже написана и я особо не разбираюсь в Делфи.

Моя программа работает отлично, как бы всё устраивает...
Вот только теперь осталось мне добавить в код, что бы она еще по мимо

href="http://my.mail.ru/apps/710278'

так же одновременно искала

href="https://my.mail.ru/apps/710278'

Всю её переделывать, нет смысла...

Цитата Сообщение от NIKOLAYY Посмотреть сообщение
В каком встроенном браузере? если ты про компонет WebBrowser то там еще проще ссылки с загруженной в него страницы собрать.
Совершенно верно, компонет WebBrowser.
0
2594 / 852 / 75
Регистрация: 21.04.2013
Сообщений: 6,751
23.09.2015, 06:12 4
Раз оно так, то оберните код в функцию, а аргументом сделайте искомую строку. И будете вызывать эту функцию 2 раза, в одном варианте с s, в другом без.
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
23.09.2015, 06:20  [ТС] 5
Цитата Сообщение от Storm Screamer Посмотреть сообщение
Раз оно так, то оберните код в функцию, а аргументом сделайте искомую строку. И будете вызывать эту функцию 2 раза, в одном варианте с s, в другом без.
Еще бы знать как это сделать!

Добавлено через 6 минут
Нужные мне ссылки выглядят вот так:

"https://my.mail.ru/apps/710278?ref=sp14230516490886090214&anchor=pstar_loc%3Dhelp_post_5601a70c2f07e#pst ar_loc=help_post_5601a70c2f07e"

или так:

"http://my.mail.ru/apps/710278?ref=sp14230516490886090214&anchor=pstar_loc%3Dhelp_post_5601a70c2f07e#pst ar_loc=help_post_5601a70c2f07e"
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
23.09.2015, 10:53 6
oniava,
Я тебя понял ты из исходного кода всей страницы "с большой кучи мусора" пытаешся отыскать нужные http:// либо https:// ссылки.
Не проще ли вытащить сначала все ссылки со страницы одной строкой кода и потом уже спарсить среди них уже нужные тебе?
http://parsing-and-i.blogspot.... bject.html

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('https://www.youtube.com/');
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
begin
  //поиск всех ссылок на странице
  for i := 0 to WebBrowser1.OleObject.Document.Links.Length - 1 do
  begin
    Memo1.Lines.Add(WebBrowser1.OleObject.Document.Links.Item(i));
  end;
end;
Миниатюры
Поиск ссылок в WebBrowser-е  
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
23.09.2015, 15:44  [ТС] 7
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
Я тебя понял ты из исходного кода всей страницы "с большой кучи мусора" пытаешся отыскать нужные http:// либо https:// ссылки.
Так мне не надо все!
Мне нужно определенные ссылки, или такие href="http://my.mail.ru/apps/710278' или такие href="https://my.mail.ru/apps/710278'.

При том, программа по мимо ссылок еще множество функций выполняет и менять её нет смысла...

Хотелось бы просто добавить, что бы она искала и другую ссылку.

Сейчас она ищет href="http://my.mail.ru/apps/710278' и найдя её переходит по ней, нужно что бы и одновременно еще искала href="https://my.mail.ru/apps/710278'.

Одним словом, или ту или эту...
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
23.09.2015, 16:20 8
oniava,
Аа я тебя понял, ты не хочеш переделывать код..

Так продублирой тогда весь код два раза! За место 20 строк сделай его на 40 строк! Но во втором коде дубле добавь к http букву s.
Или еще как вариант тебе уже Storm Screamer посоветовал.

Он все верно написал- Раз оно так, то оберните код в функцию, а аргументом сделайте искомую строку. И будете вызывать эту функцию 2 раза, в одном варианте с s, в другом без.

Тогда у тебя останется 20 строк твоего кода и в вызове функции добавится всего 2 строки. 20 + 2 = 22 строки кода.
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
23.09.2015, 16:28  [ТС] 9
Николай, спасибо конечно, но проблема в том, что я сам в Делфи разбираюсь пока на 2+

Поэтому я и обратился сюда в раздел, ДЛЯ НАЧИНАЮЩИХ, в ожидании того, что кто то мне сможет помочь сгруппировать эти две ссылки...

Я Вам в личку написал...

Тот код что я выложил, это всего лишь часть, а в реале в программе активно 3 окна и код гораздо длиннее...
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
23.09.2015, 17:46 10
Цитата Сообщение от oniava Посмотреть сообщение
Тот код что я выложил, это всего лишь часть, а в реале в программе активно 3 окна и код гораздо длиннее...
Откуда я знаю что у тебя там, на пробуй вставляй сам.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Pars(path: string): string;
begin
  //здесь твоя функция замени строку в коде http ://my.mail.ru/apps/710278
  //на переменную path
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  //2 раза вызов функции с параметрами которые отойдут в переменную path
  Pars('http://my.mail.ru/apps/710278');
  Pars('https://my.mail.ru/apps/710278');
end;
 
end.
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 108
24.09.2015, 07:44  [ТС] 11
Николай, посмотрите пожалуйста в личке...

Добавлено через 13 часов 12 минут
Друзья, вот скажите!!!
Создан форум, создан раздел для новичков...
Но почему то в этом разделе, все только словом помогают, а реально расставить в се точки над Й, не кто не может...
Зачем раздел этот?
К чему вся переписка?
Смысл всей писанины, вообще какой?
0
24.09.2015, 07:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.09.2015, 07:44
Помогаю со студенческими работами здесь

Открытие ссылок в WebBrowser в его же окне
подскажите, как сделать открытие ссылок в web browser не в internet explorer, а в самом web browser.

Webbrowser запретить открытие ссылок в internet explorer
Элемент TWebBrowser открывает некоторые ссылки в новом окне internet explorer'a. Как это запретить?...

WebBrowser: указание относительных ссылок для локального сайта
Мне необходимо создать форму для просмотра локального сайта (сайт находится на локальном ПК). В...

Как мне нажать на одну из ссылок через Webbrowser в VB?
У меня есть вот такая ХТМЛ страница: &lt;FORM style='DISPLAY: inline' name=next0 action=count1.cgi...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru