-
Зависит от того что именно там мутит JavaScript. Но в общем случае полагаю надёжность может понизится... Если скрипт пересоздаст элементы - глазами можно не заметить, а элемент уже по факте новый другой. Как определить что "ссылка" на элемент уже не валидна? гм... Хотя она же "интерфейсная"... Может оно вообще останется валидным и продолжит существовать как бы все DOM. Но нам такая тем более не подойдёт. Можно понатыкать Try/Except, но от неактуальности не спасёт. Зависит от сайта короче. Не уверен как надёжно проверять актуальность содержимого переменной. На полную пустоту проверять примерно этим (нужен модуль System.Variants):Function CheckVariant(Variable: OleVariant): BooLean; Begin Result:=Not (VarIsNull(Variable) Or VarIsEmpty(Variable)); End;
Только не глобальными, а в поля формы:
Type TForm1 = Class(TForm) ... Private NodePrice, ButtonUp, ButtonDown, ... : OleVariant; Public End; А переменные Doc, List, Node лучше оставить локальными и использовать только для поиска/навигации.
-
Зависит от того что именно там мутит JavaScript. Но в общем случае полагаю надёжность может понизится... Если скрипт пересоздаст элементы - глазами можно не заметить, а элемент уже по факте новый другой. Как определить что "ссылка" на элемент уже не валидна? гм... Хотя она же "интерфейсная"... Может оно вообще останется валидным и продолжит существовать как бы все DOM. Но нам такая тем более не подойдёт. Можно понатыкать Try/Except, но от неактуальности не спасёт. Зависит от сайта короче. Не уверен как надёжно проверять актуальность содержимого переменной. На полную пустоту проверять примерно этим (нужен модуль System.Variants):Function CheckVariant(Variable: OleVariant): BooLean; Begin Result:=Not (VarIsNull(Variable) Or VarIsEmpty(Variable)); End;
Только не глобальными, а в поля формы:
Type TForm1 = Class(TForm) ... Private NodePrice, ButtonUp, ButtonDown, ... : OleVariant; Public End; А переменные Doc, List, Node лучше оставить локальными и использовать только для поиска/навигации.
-
Зависит от того что именно там мутит JavaScript. Но в общем случае полагаю надёжность может понизится... Если скрипт пересоздаст элементы - глазами можно не заметить, а элемент уже по факте новый другой. Как определить что "ссылка" на элемент уже не валидна? гм... Хотя она же "интерфейсная"... Может оно вообще останется валидным и продолжит существовать как бы все DOM. Но нам такая тем более не подойдёт. Можно понатыкать Try/Except, но от неактуальности не спасёт. Зависит от сайта короче. Не уверен как надёжно проверять актуальность содержимого переменной. На полную пустоту проверять примерно этим (нужен модуль System.Variants):Function CheckVariant(Variable: OleVariant): BooLean; Begin Result:=Not (VarIsNull(Variable) Or VarIsEmpty(Variable)); End;
Только не глобальными, а в поля формы:
Type TForm1 = Class(TForm) ... Private NodePrice, ButtonUp, ButtonDown, ... : OleVariant; Public End; А переменные Doc, List, Node лучше оставить локальными и использовать только для поиска/навигации.
-
Зависит от того что именно там мутит JavaScript. Но в общем случае полагаю надёжность может понизится... Если скрипт пересоздаст элементы - глазами можно не заметить, а элемент уже по факте новый другой. Как определить что "ссылка" на элемент уже не валидна? гм... Хотя она же "интерфейсная"... Может оно вообще останется валидным и продолжит существовать как бы все DOM. Но нам такая тем более не подойдёт. Можно понатыкать Try/Except, но от неактуальности не спасёт. Зависит от сайта короче. Не уверен как надёжно проверять актуальность содержимого переменной. На полную пустоту проверять примерно этим (нужен модуль System.Variants):Function CheckVariant(Variable: OleVariant): BooLean; Begin Result:=Not (VarIsNull(Variable) Or VarIsEmpty(Variable)); End;
Только не глобальными, а в поля формы:
Type TForm1 = Class(TForm) ... Private NodePrice, ButtonUp, ButtonDown, ... : OleVariant; Public End; А переменные Doc, List, Node лучше оставить локальными и использовать только для поиска/навигации.
-
Досадные опечатки...
> по факту
> как бы вне
-
Досадные опечатки...
> по факту
> как бы вне
-
Досадные опечатки...
> по факту
> как бы вне
-
Досадные опечатки...
> по факту
> как бы вне
-
Досадные опечатки...
> по факту
> как бы вне
-
Досадные опечатки...
> по факту
> как бы вне
-
Ну вот «"потыкал" я "палочкой"» элементы/узлы документа - после удаления они остаются вполне действующими. Придётся всё же как-то проверять перед работой (и если что - обновлять). Например:Procedure TForm1.UpdateNodePrice(Doc: OleVariant); Begin ... // Алгоритм поиска для NodePrice (в переданном Doc) NodePrice:= ... ; End;
Procedure TForm1.UpdateButtonUp(Doc: OleVariant); Begin ... // Алгоритм поиска для ButtonUp (в переданном Doc) ButtonUp:= ... ; End;
Procedure TForm1.UpdateButtonDown(Doc: OleVariant); Begin ... // Алгоритм поиска для ButtonDown (в переданном Doc) ButtonDown:= ... ; End;
... // Остальные переменные по аналогии
Procedure TForm1.CheckAll(WB: TWebBrowser); Var Doc: OleVariant; Begin Doc:=WB.Document; If CheckNode(NodePrice) Then UpdateNodePrice(Doc); If CheckNode(UpdateButtonUp) Then UpdateButtonUp(Doc); If CheckNode(UpdateButtonDown) Then UpdateButtonDown(Doc); ... // Остальные переменные по аналогии End;
Procedure TForm1.Timer1Timer(Sender: TObject); Begin // Найдём (или проверим актуальность) все элементы: CheckAll(WebBrowser1); ... // Пользуемся ими - получаем innerHTML или click или ещё что там надо End; Осталось придумать как сделать функцию проверки CheckNode()... Возможно получится проверять у целевого Node - а задан ли parentNode (или parentElement). Если нету, то возможно его удалили из DOM...
-
Ну вот «"потыкал" я "палочкой"» элементы/узлы документа - после удаления они остаются вполне действующими. Придётся всё же как-то проверять перед работой (и если что - обновлять). Например:Procedure TForm1.UpdateNodePrice(Doc: OleVariant); Begin ... // Алгоритм поиска для NodePrice (в переданном Doc) NodePrice:= ... ; End;
Procedure TForm1.UpdateButtonUp(Doc: OleVariant); Begin ... // Алгоритм поиска для ButtonUp (в переданном Doc) ButtonUp:= ... ; End;
Procedure TForm1.UpdateButtonDown(Doc: OleVariant); Begin ... // Алгоритм поиска для ButtonDown (в переданном Doc) ButtonDown:= ... ; End;
... // Остальные переменные по аналогии
Procedure TForm1.CheckAll(WB: TWebBrowser); Var Doc: OleVariant; Begin Doc:=WB.Document; If CheckNode(NodePrice) Then UpdateNodePrice(Doc); If CheckNode(UpdateButtonUp) Then UpdateButtonUp(Doc); If CheckNode(UpdateButtonDown) Then UpdateButtonDown(Doc); ... // Остальные переменные по аналогии End;
Procedure TForm1.Timer1Timer(Sender: TObject); Begin // Найдём (или проверим актуальность) все элементы: CheckAll(WebBrowser1); ... // Пользуемся ими - получаем innerHTML или click или ещё что там надо End; Осталось придумать как сделать функцию проверки CheckNode()... Возможно получится проверять у целевого Node - а задан ли parentNode (или parentElement). Если нету, то возможно его удалили из DOM...
-
Ну вот «"потыкал" я "палочкой"» элементы/узлы документа - после удаления они остаются вполне действующими. Придётся всё же как-то проверять перед работой (и если что - обновлять). Например:Procedure TForm1.UpdateNodePrice(Doc: OleVariant); Begin ... // Алгоритм поиска для NodePrice (в переданном Doc) NodePrice:= ... ; End;
Procedure TForm1.UpdateButtonUp(Doc: OleVariant); Begin ... // Алгоритм поиска для ButtonUp (в переданном Doc) ButtonUp:= ... ; End;
Procedure TForm1.UpdateButtonDown(Doc: OleVariant); Begin ... // Алгоритм поиска для ButtonDown (в переданном Doc) ButtonDown:= ... ; End;
... // Остальные переменные по аналогии
Procedure TForm1.CheckAll(WB: TWebBrowser); Var Doc: OleVariant; Begin Doc:=WB.Document; If CheckNode(NodePrice) Then UpdateNodePrice(Doc); If CheckNode(UpdateButtonUp) Then UpdateButtonUp(Doc); If CheckNode(UpdateButtonDown) Then UpdateButtonDown(Doc); ... // Остальные переменные по аналогии End;
Procedure TForm1.Timer1Timer(Sender: TObject); Begin // Найдём (или проверим актуальность) все элементы: CheckAll(WebBrowser1); ... // Пользуемся ими - получаем innerHTML или click или ещё что там надо End; Осталось придумать как сделать функцию проверки CheckNode()... Возможно получится проверять у целевого Node - а задан ли parentNode (или parentElement). Если нету, то возможно его удалили из DOM...
-
Ну вот «"потыкал" я "палочкой"» элементы/узлы документа - после удаления они остаются вполне действующими. Придётся всё же как-то проверять перед работой (и если что - обновлять). Например:Procedure TForm1.UpdateNodePrice(Doc: OleVariant); Begin ... // Алгоритм поиска для NodePrice (в переданном Doc) NodePrice:= ... ; End;
Procedure TForm1.UpdateButtonUp(Doc: OleVariant); Begin ... // Алгоритм поиска для ButtonUp (в переданном Doc) ButtonUp:= ... ; End;
Procedure TForm1.UpdateButtonDown(Doc: OleVariant); Begin ... // Алгоритм поиска для ButtonDown (в переданном Doc) ButtonDown:= ... ; End;
... // Остальные переменные по аналогии
Procedure TForm1.CheckAll(WB: TWebBrowser); Var Doc: OleVariant; Begin Doc:=WB.Document; If CheckNode(NodePrice) Then UpdateNodePrice(Doc); If CheckNode(UpdateButtonUp) Then UpdateButtonUp(Doc); If CheckNode(UpdateButtonDown) Then UpdateButtonDown(Doc); ... // Остальные переменные по аналогии End;
Procedure TForm1.Timer1Timer(Sender: TObject); Begin // Найдём (или проверим актуальность) все элементы: CheckAll(WebBrowser1); ... // Пользуемся ими - получаем innerHTML или click или ещё что там надо End; Осталось придумать как сделать функцию проверки CheckNode()... Возможно получится проверять у целевого Node - а задан ли parentNode (или parentElement). Если нету, то возможно его удалили из DOM...
-
Ну вот «"потыкал" я "палочкой"» элементы/узлы документа - после удаления они остаются вполне действующими. Придётся всё же как-то проверять перед работой (и если что - обновлять). Например:Procedure TForm1.UpdateNodePrice(Doc: OleVariant); Begin ... // Алгоритм поиска для NodePrice (в переданном Doc) NodePrice:= ... ; End;
Procedure TForm1.UpdateButtonUp(Doc: OleVariant); Begin ... // Алгоритм поиска для ButtonUp (в переданном Doc) ButtonUp:= ... ; End;
Procedure TForm1.UpdateButtonDown(Doc: OleVariant); Begin ... // Алгоритм поиска для ButtonDown (в переданном Doc) ButtonDown:= ... ; End;
... // Остальные переменные по аналогии
Procedure TForm1.CheckAll(WB: TWebBrowser); Var Doc: OleVariant; Begin Doc:=WB.Document; If CheckNode(NodePrice) Then UpdateNodePrice(Doc); If CheckNode(UpdateButtonUp) Then UpdateButtonUp(Doc); If CheckNode(UpdateButtonDown) Then UpdateButtonDown(Doc); ... // Остальные переменные по аналогии End;
Procedure TForm1.Timer1Timer(Sender: TObject); Begin // Найдём (или проверим актуальность) все элементы: CheckAll(WebBrowser1); ... // Пользуемся ими - получаем innerHTML или click или ещё что там надо End; Осталось придумать как сделать функцию проверки CheckNode()... Возможно получится проверять у целевого Node - а задан ли parentNode (или parentElement). Если нету, то возможно его удалили из DOM...
-
Ну вот «"потыкал" я "палочкой"» элементы/узлы документа - после удаления они остаются вполне действующими. Придётся всё же как-то проверять перед работой (и если что - обновлять). Например:Procedure TForm1.UpdateNodePrice(Doc: OleVariant); Begin ... // Алгоритм поиска для NodePrice (в переданном Doc) NodePrice:= ... ; End;
Procedure TForm1.UpdateButtonUp(Doc: OleVariant); Begin ... // Алгоритм поиска для ButtonUp (в переданном Doc) ButtonUp:= ... ; End;
Procedure TForm1.UpdateButtonDown(Doc: OleVariant); Begin ... // Алгоритм поиска для ButtonDown (в переданном Doc) ButtonDown:= ... ; End;
... // Остальные переменные по аналогии
Procedure TForm1.CheckAll(WB: TWebBrowser); Var Doc: OleVariant; Begin Doc:=WB.Document; If CheckNode(NodePrice) Then UpdateNodePrice(Doc); If CheckNode(UpdateButtonUp) Then UpdateButtonUp(Doc); If CheckNode(UpdateButtonDown) Then UpdateButtonDown(Doc); ... // Остальные переменные по аналогии End;
Procedure TForm1.Timer1Timer(Sender: TObject); Begin // Найдём (или проверим актуальность) все элементы: CheckAll(WebBrowser1); ... // Пользуемся ими - получаем innerHTML или click или ещё что там надо End; Осталось придумать как сделать функцию проверки CheckNode()... Возможно получится проверять у целевого Node - а задан ли parentNode (или parentElement). Если нету, то возможно его удалили из DOM...
-
Спасибо большое, Redmond. Без этих подсказок я бы так и не решил проблему - где бы в инете не лазил - везде одна и та же скудная инфа. А как Вы (не знаю как лучше на Вы или на ты :) ) изучили эту тему с DOM? Посоветуете что почитать, с примерами, чтобы я сам начал разбираться в этом вопросе?
Решил поначалу сделать первый вариант, где будет каждый раз пр новом такте заново присваиваться Doc, List, Node и с проверкой на равенство List.length нулю, а уже потом буду параллельно делать второй вариант как в примере постом выше этого, если конечно придумаю как сделать CheckNode().
Тут еще мысля опосля пришла - нужно же как-то проверять периодически соединение с сайтом. Это можно сделать в самом WebBrowser или лучше пытаться парсить сайт (в нем есть мигающий зеленый кружок и надпись "online")?
-
Спасибо большое, Redmond. Без этих подсказок я бы так и не решил проблему - где бы в инете не лазил - везде одна и та же скудная инфа. А как Вы (не знаю как лучше на Вы или на ты :) ) изучили эту тему с DOM? Посоветуете что почитать, с примерами, чтобы я сам начал разбираться в этом вопросе?
Решил поначалу сделать первый вариант, где будет каждый раз пр новом такте заново присваиваться Doc, List, Node и с проверкой на равенство List.length нулю, а уже потом буду параллельно делать второй вариант как в примере постом выше этого, если конечно придумаю как сделать CheckNode().
Тут еще мысля опосля пришла - нужно же как-то проверять периодически соединение с сайтом. Это можно сделать в самом WebBrowser или лучше пытаться парсить сайт (в нем есть мигающий зеленый кружок и надпись "online")?
-
Спасибо большое, Redmond. Без этих подсказок я бы так и не решил проблему - где бы в инете не лазил - везде одна и та же скудная инфа. А как Вы (не знаю как лучше на Вы или на ты :) ) изучили эту тему с DOM? Посоветуете что почитать, с примерами, чтобы я сам начал разбираться в этом вопросе?
Решил поначалу сделать первый вариант, где будет каждый раз пр новом такте заново присваиваться Doc, List, Node и с проверкой на равенство List.length нулю, а уже потом буду параллельно делать второй вариант как в примере постом выше этого, если конечно придумаю как сделать CheckNode().
Тут еще мысля опосля пришла - нужно же как-то проверять периодически соединение с сайтом. Это можно сделать в самом WebBrowser или лучше пытаться парсить сайт (в нем есть мигающий зеленый кружок и надпись "online")?
-
Спасибо большое, Redmond. Без этих подсказок я бы так и не решил проблему - где бы в инете не лазил - везде одна и та же скудная инфа. А как Вы (не знаю как лучше на Вы или на ты :) ) изучили эту тему с DOM? Посоветуете что почитать, с примерами, чтобы я сам начал разбираться в этом вопросе?
Решил поначалу сделать первый вариант, где будет каждый раз пр новом такте заново присваиваться Doc, List, Node и с проверкой на равенство List.length нулю, а уже потом буду параллельно делать второй вариант как в примере постом выше этого, если конечно придумаю как сделать CheckNode().
Тут еще мысля опосля пришла - нужно же как-то проверять периодически соединение с сайтом. Это можно сделать в самом WebBrowser или лучше пытаться парсить сайт (в нем есть мигающий зеленый кружок и надпись "online")?
|