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

CreateOleObject('InternetExplorer.Application') ошибка invalid variant operation

14.10.2015, 20:48. Показов 2574. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Решил написать небольшую программу-анализатор информации на странице вот код:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
 
var
   IE: Variant;
   output,HTML: string;
begin
    IE := CreateOleObject('InternetExplorer.Application');
  IE.Navigate('https://steamcommunity.com/market/listings/730/Glock-18%20%7C%20Wraiths%20%28Battle-Scarred%29?l=russian');
  While IE.Busy do begin end;
  HTML:= IE.Document.body.innerHTML ;
  output:='';
  Delete(HTML,1,pos('$J(document).ready(function(){',HTML)+length('$J(document).ready(function(){')-1);
  output:=copy(HTML,1,pos('"]];',HTML)+2);
  Memo1.Lines.Add(output);
end;
 
end.
Но столкнулся с такой проблемой что тип Variant очень опасная штука и я понятия не имею какой тип использовать для создания объекта InternetExplorer(WebBrowser не использую по определению что мне нужен только HTML код)
Он опасен тем что не определен и очень странно себя ведет, например если выполнить этот код то с вероятностью 50% вы получите ошибку invalid variant operation а Debug напишет следующее сообщение: Exception class EVariantInvalidOpError with message 'Invalid variant operation'.
Но в редких случаях ошибки нет и я получаю то что нужно

В чем причина?

P.S. также на появление ошибки влияют переменные с другим типом(не Variant) output,HTML: string;
P.S.S Версия Delphi XE4

Добавлено через 6 минут
Также если есть предложение что использовать вместо InternetExplorer(для повышения скорости) пожалуйста поделитесь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2015, 20:48
Ответы с готовыми решениями:

invalid variant operation
Компилятор выводит ошибку "invalid variant operation" и указывает на строку ...

Ошибка: Invalid pointer operation
Вот код в OnCreate: if not (label2.Caption='') and (label1.Caption='') then ...

Ошибка 'invalid pointer operation'
Я создал прогу которая делает скриншот экрана и передает её к клиенту. И у меня возникли такие...

Ошибка floating point invalid operation
Разбираю код симплекс-метода. Программа не находит минимум функции. Все остальное работает...

8
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
14.10.2015, 20:54 2
Цитата Сообщение от nontxt Посмотреть сообщение
WebBrowser не использую по определению что мне нужен только HTML код
WebBrowser и InternetExplorer.Application - одни и те же фаберже, с видами соответственно в профиль и в анфас.

Цитата Сообщение от nontxt Посмотреть сообщение
нужен только HTML код
Для заколачивания гвоздей совершенно не обязательно использовать микроскоп (WebBrowser, он же InternetExplorer.Application) - для этого есть молоток (Indy TIdHTTP, Synapse THTTPSend)
0
1 / 1 / 2
Регистрация: 13.01.2014
Сообщений: 30
14.10.2015, 21:06  [ТС] 3
Цитата Сообщение от mss Посмотреть сообщение
для этого есть молоток (Indy TIdHTTP, Synapse THTTPSend)
Увы но я не зря написал про IE тк на сайт по дефолту написан на английском языке а приставка в URL: "?l=russian" переводит все содержимое на русский язык(скорее всего при помощи java)
Если использовать TIdHTTP просто выскакивает ошибка
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
14.10.2015, 21:09 4
Цитата Сообщение от nontxt Посмотреть сообщение
скорее всего при помощи java
Тогда какой смысл пытаться выковыривать из текста полученного документа JS-скрипт ?
0
1 / 1 / 2
Регистрация: 13.01.2014
Сообщений: 30
14.10.2015, 21:19  [ТС] 5
Цитата Сообщение от mss Посмотреть сообщение
Тогда какой смысл пытаться выковыривать из текста полученного документа JS-скрипт ?
Вы не поняли наверное(я и сам толком не понимаю как реализована смена языка на сайте) суть в том что при смене языка меняется наполнение документа
Если в indy обратиться к этой странице то indy не поймет что ему делать с этой частью: "?l=russian" и выдаст ошибку
в TWebBrowser такого нет и он переведет страницу.
Возможно я ошибаюсь и смена языка происходит с использованием чего-то другого, но то что indy не может его обработать уже проверено.
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
14.10.2015, 21:35 6
Проверил - никаких ошибок Инди не выдает

Честно возвращает текст страницы - и с тем самым аппендиксом в URL и без него

Единственная разница - делал обычный запрос, а не через SSL, чтобы не городить огород
0
1 / 1 / 2
Регистрация: 13.01.2014
Сообщений: 30
14.10.2015, 21:56  [ТС] 7
Цитата Сообщение от mss Посмотреть сообщение
Проверил - никаких ошибок Инди не выдает
Хм..сам только что проверил, действительно нет ошибок.

Ошибки были когда использовал потоки Thread
Удивительно что при этом апендиксе поток зависал а инди при этом писала Disconnect
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
14.10.2015, 21:58 8
Цитата Сообщение от nontxt Посмотреть сообщение
Ошибки были когда использовал потоки Thread
Значит криво использовал.
0
1 / 1 / 2
Регистрация: 13.01.2014
Сообщений: 30
14.10.2015, 22:28  [ТС] 9
Цитата Сообщение от mss Посмотреть сообщение
Значит криво использовал.
Увы но это не отменяет проблему того что язык и тем самым контент не меняется
Можете сравнить <title> html браузера и инди, часть переводится а часть нет
Есть идеи как это побороть?
0
14.10.2015, 22:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2015, 22:28
Помогаю со студенческими работами здесь

Ошибка в DLL: 'Invalid pointer operation'
Есть DLL library proba; uses SysUtils, Classes; {$R *.res} function...

XLApp:= CreateOleObject('Excel.Application');
создаю приложение Excel. XLApp:= CreateOleObject('Excel.Application'); Открываю в нем...

Ошибка программы: "Invalid floating point operation"
не знаю что такое, подскажите. Project raised exception Class EInvalidOp with message &quot; Invalid...

Invalid floating operation
Помогите исправить ошибку при вычислении.Ввожу данные A и B и точность,нажимаю пуск и ошибка...


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

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