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

Несколько задач по Chromium

26.09.2015, 08:39. Показов 4269. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Начал юзать TChromium, столкнулся с немалым рядом вопросов, ибо в инете мануалов по компоненту очень мало.
Буду признателен, кто ответит.
1. Каким способом можно регулировать позицию вертикального скроллбара?
2. Как отобразить\удалить определённый div не сохраняя и не загружая html файл?
3. Каким способом, например, можно нажать "5 звёзд" на странице https://market.yandex.ru/shop/3678/reviews/add
4. И главное - после закрытия формы вылазит ошибка "Exception EAccessViolation in module Project1.exe at 0012C5D5. Access violation at address 0052C5DB in module 'Project.exe'. Read of address 00000000.". Дело явно в компоненте. Даже если просто кинуть компонент на форму и кнопку, прописав элементарный Chromium1.Load('https://yandex.ru/');, всё равно будет ошибка. В процессе никаких проблем, только после закрытия.

Есть ещё куча вопросов, но это - терзающие.
Всем большое спасибо, кто хоть чем-то поможет.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2015, 08:39
Ответы с готовыми решениями:

Js код в несколько строчек в chromium
Есть js код,как запустить его в chromium? Chromium1.Browser.GetMainFrame.ExecuteJavaScript(js...

Несколько задач
Доброго времени суток, помогите пожалуйста написать несколько программ, если не трудно. 1)...

Несколько задач
Товарищи, помогите воспрепятствовать отчислению Сдавал уже несколько раз Все не принимали ...

Несколько задач
Математическое ожидание а и среднее квадратическое отклонение сигма нормально распределенной...

13
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 61
27.09.2015, 22:14  [ТС] 2
Неужели никто не знает?
0
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 61
29.09.2015, 14:51  [ТС] 3
up....(
0
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 61
01.10.2015, 18:12  [ТС] 4
всё ещё up.....
0
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
02.10.2015, 01:50 5
Цитата Сообщение от Dimok123 Посмотреть сообщение
1. Каким способом можно регулировать позицию вертикального скроллбара?
например через выполнение JavaScript, вот так перемотает в начало страницы
Delphi
1
Chromium1.Browser.Mainframe.ExecuteJavaScript('window.scroll(0, 0);', 'about:blank', 0);
Цитата Сообщение от Dimok123 Посмотреть сообщение
2. Как отобразить\удалить определённый div не сохраняя и не загружая html файл?
аналогично можно через выполнение JavaScript, например удалить DIV
Java
1
2
3
4
5
// Не кроссбраузерно:
document.getElementById('ID').remove()
// Кроссбраузерно:
var elem = document.getElementById(id);
elem.parentNode.removeChild(elem);
где ID - ID нужного DIV
Цитата Сообщение от Dimok123 Посмотреть сообщение
3. Каким способом, например, можно нажать "5 звёзд" на странице
аналогично - кликнуть на нужный элемент, например кликнуть на некую кнопку "bonus"
Delphi
1
Chromium1.Browser.Mainframe.ExecuteJavaScript('document.forms[0].bonus.click();', 'about:blank', 0);
Цитата Сообщение от Dimok123 Посмотреть сообщение
4. И главное - после закрытия формы вылазит ошибка "Exception EAccessViolation in module Project1.exe at 0012C5D5. Access violation at address 0052C5DB in module 'Project.exe'. Read of address 00000000.". Дело явно в компоненте. Даже если просто кинуть компонент на форму и кнопку, прописав элементарный Chromium1.Load('https://yandex.ru/');, всё равно будет ошибка.
а версия delphi у вас какая?
1
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 61
02.10.2015, 07:37  [ТС] 6
VladWH , спасибо огромное за ответы! Хоть кто-то ответил.
1. Со скроллбаром всё понятно. Спасибо.
2. С DIVом не разобрался. Как удалить, зная только класс? Допустим
HTML5
1
<div class="b-page-title b-page-title_type_aura"></div>
3. К сожалению, так не получается, пробовал. Сам код
HTML5
1
2
3
4
5
6
7
<div class="rating-stars rating-stars_size_xl js-review-post-wizard-item-1__rating-data js-review-post-wizard-item-1__item-required i-bem rating-stars_variable_yes rating-stars_js_inited" data-rate="" onclick="return&nbsp;{&quot;rating-stars&quot;:{&quot;variable&quot;:&quot;yes&quot;,&quot;label&quot;:&quot;yes&quot;}}">
<i class="rating-stars__star" data-rate-name="Ужасный магазин"></i>
<i class="rating-stars__star" data-rate-name="Плохой магазин"></i>
<i class="rating-stars__star" data-rate-name="Обычный магазин"></i>
<i class="rating-stars__star" data-rate-name="Хороший магазин"></i>
<i class="rating-stars__star" data-rate-name="Отличный магазин"></i>
<input name="gr_0" class="rating-stars__value" value="" type="hidden"><div class="rating-stars__label"></div></div>
4. Версия Delphi XE.

Спасибо ещё раз большое!
0
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
02.10.2015, 18:18 7
Цитата Сообщение от Dimok123 Посмотреть сообщение
Как удалить, зная только класс?
да все так же...
Java
1
2
3
4
5
6
7
8
// получаем коллекцию объектов заданного класса
var classEls = (document.getElementsByClassName("какой-то класс"));
// удаляем в цикле...
for(var i=classEls.length-1;i=0; i--) 
 { 
   var parent = classEls[I].parentNode;
   mainparent.removeChild(parent);
  }
Цитата Сообщение от Dimok123 Посмотреть сообщение
К сожалению, так не получается, пробовал. Сам код
потому что там не "5 звезд" нажать нужно, а заполнить целую форму и отправить её
0
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 61
03.10.2015, 07:48  [ТС] 8
Цитата Сообщение от VladWH Посмотреть сообщение
// получаем коллекцию объектов заданного класса
var classEls = (document.getElementsByClassName("какой-то класс"));
// удаляем в цикле...
for(var i=classEls.length-1;i=0; i--)
*{
* *var parent = classEls[I].parentNode;
* *mainparent.removeChild(parent);
* }
Если я правильно понял, то делаю так:
Пихаю этот яваскрипт в тхт файл, загружаю в переменную TStringList и пытаюсь выполнить скрипт:
Delphi
1
Chromium1.Browser.Mainframe.ExecuteJavaScript(s.Text, 'about:blank', 0);
Так оно не работает. По-другому я не знаю как сделать.
Прошу прощение за дотошность, я профан в этом(

Цитата Сообщение от VladWH Посмотреть сообщение
потому что там не "5 звезд" нажать нужно, а заполнить целую форму и отправить её
Да я как только не пробовал, не получается. Можете привести рабочий код?
0
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
03.10.2015, 16:04 9
Цитата Сообщение от Dimok123 Посмотреть сообщение
Пихаю этот яваскрипт в тхт файл, загружаю в переменную TStringList и пытаюсь выполнить скрипт
да, можно и так
Цитата Сообщение от Dimok123 Посмотреть сообщение
Так оно не работает
скрипт я не проверял, но должно работать, попробуйте так
Java
1
2
3
4
5
6
7
8
9
10
// получаем коллекцию объектов заданного класса
var classEls = (document.getElementsByClassName("какой-то класс"));
// удаляем в цикле...
var i=0;
while ( i<classEls.length-1 )
 {
  var parent = classEls[0].parentNode;
  mainparent.removeChild(parent);
  i++;
 }
Цитата Сообщение от Dimok123 Посмотреть сообщение
Да я как только не пробовал, не получается. Можете привести рабочий код?
так надо полностью заполнить форму для отправки скриптом, а не просто отправлять её, как заполнить можете найти в интернете... покажите как пробуете
0
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 61
03.10.2015, 19:00  [ТС] 10
Цитата Сообщение от VladWH Посмотреть сообщение
скрипт я не проверял, но должно работать, попробуйте так
К сожалению, не работает. Я до этого так же пробовал разные скрипты из гугла. Ни один не заработал(

Цитата Сообщение от VladWH Посмотреть сообщение
так надо полностью заполнить форму для отправки скриптом, а не просто отправлять её, как заполнить можете найти в интернете... покажите как пробуете
Заполнить - не проблема. А вот выставить оценку - не получается.
Как я понял, то там достаточно заполнить value в строчке

HTML5
1
<input value="" name="gr_0" class="rating-stars__value" type="hidden">
Пытаюсь сделать так:
Delphi
1
2
CodeStr := 'document.getElementsByclassName("rating-stars__value").value="2";' ;
Chromium1.Browser.MainFrame.ExecuteJavaScript(CodeStr, 'about:blank', 0);
Но не получается. Форма полностью заполнена, то без выставленной оценки не отправляется.

Добавлено через 11 минут
И так тоже не работает:

Delphi
1
2
CodeStr := 'document.forms[0].gr_0.value="2";' ;
Chromium1.Browser.MainFrame.ExecuteJavaScript(CodeStr, 'about:blank', 0);
Добавлено через 2 часа 0 минут
Получилось только так:
Delphi
1
2
CodeStr := 'document.getElementsByTagName("input")[9].value="1"' ;
Chromium1.Browser.MainFrame.ExecuteJavaScript(CodeStr, 'about:blank', 0);
Но это же неправильно( Хотелось бы по классу или по name хотя бы
0
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
03.10.2015, 19:17 11
Цитата Сообщение от Dimok123 Посмотреть сообщение
К сожалению, не работает. Я до этого так же пробовал разные скрипты из гугла. Ни один не заработал
надо не из гугла, а если и оттуда, то понимать что выполняете, вот например
Java
1
2
3
4
5
6
7
// очищаем страницу и пишем пару тегов DIV в неё
document.write(); document.close();
document.write("<div id='first' class='div1'>класс div1</div><div class='div2'>класс div2</div>");
// получаем первый элемент класса div2
var elem = document.getElementsByClassName('div2')[0];
// удаляем его
elem.parentNode.removeChild(elem);
все прекрасно работает и удаляет тег класса div2 - это вам просто пример того как может быть
Цитата Сообщение от Dimok123 Посмотреть сообщение
о это же неправильно( Хотелось бы по классу или по name хотя бы
ну так получайте элемент по классу или по имени - что мешает?
0
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 61
03.10.2015, 19:31  [ТС] 12
Цитата Сообщение от VladWH Посмотреть сообщение
все прекрасно работает и удаляет тег класса div2 - это вам просто пример того как может быть
Да, работает)) Спасибо большое.
Понимаю, всё просто. Но с яваскриптами дел никогда не имел)

Цитата Сообщение от VladWH Посмотреть сообщение
ну так получайте элемент по классу или по имени - что мешает?
Я выше описывал свои попытки это сделать. Но, ничего не получается.
0
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
03.10.2015, 21:38 13
Цитата Сообщение от Dimok123 Посмотреть сообщение
Я выше описывал свои попытки это сделать. Но, ничего не получается.
вот несколько вариантов того как можно работать...
Java
1
2
3
4
5
6
7
8
9
10
11
// получение элемента DIV с звездами
var elem = document.getElementsByClassName('rating-line rating-line_size_l js-review-post-wizard-item-1__rating-data js-review-post-wizard-item-1__item-required i-bem rating-line_variable_yes rating-line_js_inited')[0];
// установка атрибута - выделяет, но не запоминает значение - не подходит для отправки
elem.setAttribute('data-rate', '1');
// получение и установка значения в скрытое поле - можно, но тоже не совсем то
var stars = elem.getElementsByClassName('rating-line__value')[0];
stars.value = 1;
// получение элемента "1 звезда"
var el = elem.firstChild;
// клик по элементу - установит 1 звезду - подходит
el.click();
аналогично можно получить элемент "2 звезды".."5 звезд"
1
0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 61
04.10.2015, 09:56  [ТС] 14
Цитата Сообщение от VladWH Посмотреть сообщение
вот несколько вариантов того как можно работать...
Спасибо большое. Буду разбираться.

По поводу ошибки после закрытия программы - не знаете как решить?

Добавлено через 42 минуты
Ошибки нет, если только динамически создавать.

Добавлено через 1 час 3 минуты
Хотя нет, тоже есть ошибка.
Ошибка вылазит, когда заходишь на страницу yandex.ru или market.yandex.ru.
Может это связано как-то с яваскриптами, которые находятся на странице?

Добавлено через 13 минут
В общем, если в опциях отключить Plugins, то ошибка не вылазит)
VladWH, спасибо ещё раз большое за помощь.
0
04.10.2015, 09:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2015, 09:56
Помогаю со студенческими работами здесь

Несколько задач
Здравствуйте мне опять нужна ваша помощь! нужно решить по математической логике если можно? 13....

несколько задач
Не надо несколько задач помещать в одну тему. 5.Какая доля энергии фотона израсходована на работу...

Несколько задач
Помогите решить задачи с 1 по 9

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


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

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