Полезная информация

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.
  • Форумы
  •  » iMacros
  •  » Вытянуть данные при совпадении нескольких условий

№115-09-2019 00:23:25

gødmøde
Участник
 
Группа: Members
Зарегистрирован: 14-09-2019
Сообщений: 22
UA: Chrome 76.0

Вытянуть данные при совпадении нескольких условий

Добрый вечер, я совсем новичек в этом деле, начинаю с самого простого, но уже нужна помощь более опытных)
Помогите пожалуйста мне извлечь данные из сайта при некоторых условиях, а именно:
1 data-server=9792
2 data-side=52
3 data-online=1
если все эти 3 параметра совпадают - тогда нужно цену сохранить в файл, но вообще моя цель это сохранить самую дешевую цену из всех(что попали под 3 мои условия выше) в файл или переменную
 

скрытый текст

Выделить код

Код:

<tr data-href="тутURL" data-server="9792" data-side="52" data-online="1">
        <td>ServerAbc</td>
                  <td>Orki</td>
                          <td><div>
                         <a href="тутURL/users/2323/">ProdavecVasia</a> 
                     <span class="label label-success">online</span>
                  <a href="тутURL">ProdavecVasia</a> <span class="label label-success">online</span></div><div class="text-muted">на сайте год, 333 отзывов</div></td>                <td class="text-right">
          49        </td>
        <td class="text-right" data-s="2">
          <div>9.96 ₽</div>
                  </td>
      </tr>


вот собственно что сделал я
скрытый текст

Выделить код

Код:

var macro;
macro =  "CODE:";
macro +=  "TAG POS=1 TYPE=TR ATTR=data-server:9792&&data-side:52&&data-online:1 EXTRACT=TXT " + "\n";
macro +=  "SAVEAS TYPE=EXTRACT FOLDER=D:\\Macros\\test FILE=+_{{!NOW:yyyymmdd_hhnnss}}" + "\n";
iimPlay(macro)


и получил ответ в виде вот такого csv
скрытый текст

Выделить код

Код:

"
        ServerAbc
                  Orki
                          ProdavecVasia onlineна сайте год, 333 отзывов                
          49        
        
          9.96 ₽
                  
      "


Но мне не нужен весь этот текст, а только цена 9.96 (даже без символа ₽)
Я прекрасно понимаю что достал не самую маленькую цену как мне надо, а просто цену и кучу мусора с TAG POS=1 которые попали под мои 3 критерия, но так как сортировка на сайте у меня стояла от дешевого к дорогому, эта цена получается самая низкая, мне очень любопытно посмотреть как правильно решать мою задачу, может не стоит тащить весь этот мусор? ATTR=data-server:9792&&data-side:52&&data-online:1 EXTRACT=TXT ?? может надо просто проверить его наличие? или же вытащить цену с этим мусором, а потом его как-то отрезать?
Или же обьявить переменные и как-то сверять их с этим  ATTR=data-server:9792&&data-side:52&&data-online ? если все верно то вытаскивать data-s (тоесть цену)
вообщем в моей голове появилось несколько вариантов решения моей же задачи, но вот только инструментов для ее реализации там пока недостаточно(
буду признателен тому кто направит на путь истинный...

Отсутствует

 

№215-09-2019 01:58:12

Squatter
Участник
 
Группа: Members
Зарегистрирован: 11-05-2017
Сообщений: 123
UA: Chrome 64.0

Re: Вытянуть данные при совпадении нескольких условий

Потратьте полчаса на изучение селекторов


и сможете извлекать всё что угодно методами

querySelector и querySelectorAll

Знакомьтесь с методом getAttribute() для извлечения значений атрибутов

Вот ваши параметры по отдельности

скрытый текст

Выделить код

Код:

var node = window.document.querySelector('tr[data-href]');

var data_server = node.getAttribute('data-server');
var data_side = node.getAttribute('data-side');
var data_online = node.getAttribute('data-online');

// Значение цены
var price = node.querySelector('.text-right>div').textContent;

// Смотрим в консоль по ctrl + shift + k

window.console.log(data_server);
window.console.log(data_side);
window.console.log(data_online);
window.console.log(price);

// Значение цены без лишнего символа
window.console.log(price.match(/[0-9.]+/)[0]);


Чтобы фильтровать ненужные символы и извлекать из текста необходимое, изучайте регулярные выражения

скрытый текст
Войдите или зарегистрируйтесь, чтобы увидеть скрытый текст.

Отсутствует

 

№315-09-2019 12:48:06

gødmøde
Участник
 
Группа: Members
Зарегистрирован: 14-09-2019
Сообщений: 22
UA: Chrome 76.0

Re: Вытянуть данные при совпадении нескольких условий

спасибо за отклик, вы значительно подвинули меня к конечной цели)
ну я снова остановился на условии else

скрытый текст

Выделить код

Код:

var node = window.document.querySelector('tr[data-href]');
var data_server = node.getAttribute('data-server');
var data_side = node.getAttribute('data-side');
var data_online = node.getAttribute('data-online');
var price = node.querySelector('.text-right>div').textContent;
if(data_server==3194&&data_side==52&&data_online==1){ //проверяю чтобы все совпадало
window.console.log(price.match(/[0-9.]+/)[0]);} //вывожу цену если все ок по моим критериям
else{
тут если не совпадает,  хочу сказать чтобы скрипт проверял дальше, следующий var node, как это правильно писать? что почитать на эту тему?
}

Отредактировано gødmøde (15-09-2019 14:18:46)

Отсутствует

 

№415-09-2019 21:23:56

Squatter
Участник
 
Группа: Members
Зарегистрирован: 11-05-2017
Сообщений: 123
UA: Chrome 64.0

Re: Вытянуть данные при совпадении нескольких условий

Используйте циклы

скрытый текст
Войдите или зарегистрируйтесь, чтобы увидеть скрытый текст.


Если у вас все ноды tr[data-href] на одной странице, то собираете их в один массивоподобный объект методом querySelectorAll
Потом перебираете в цикле со своим условием
скрытый текст

Выделить код

Код:

var nodes = window.document.querySelectorAll('tr[data-href]');
for (i=0;i<nodes.length;i++) {
  var node = nodes[i];
  var data_server = node.getAttribute('data-server');
  var data_side = node.getAttribute('data-side');
  var data_online = node.getAttribute('data-online');
  var price = node.querySelector('.text-right>div').textContent;
  if(data_server==3194&&data_side==52&&data_online==1)//проверяю чтобы все совпадало
    window.console.log(price.match(/[0-9.]+/)[0]); //вывожу цену если все ок по моим критериям
}


Примеров работы с циклами на формуме масса.

Отсутствует

 

№515-09-2019 23:49:59

gødmøde
Участник
 
Группа: Members
Зарегистрирован: 14-09-2019
Сообщений: 22
UA: Chrome 76.0

Re: Вытянуть данные при совпадении нескольких условий

хотелось бы извлечь лишь самую дешевую цену, а не все, чтобы потом попробовать запилить проверку по нику "не принадлежит ли эта самая дешевая цена - мне" если цена моя, то обновляем страницу и поновой чекаем, ну а если цена не моя, а "ProdavecVasia" то там уже совсем другая история) туда пока еще я не дошел

скрытый текст

Выделить код

Код:

var macro;
macro =  "CODE:";
var nodes = window.document.querySelectorAll('tr[data-href]');
for (i=0;i<nodes.length;i++) {
  var node = nodes[i];
  var data_server = node.getAttribute('data-server');
  var data_side = node.getAttribute('data-side');
  var data_online = node.getAttribute('data-online');
  var name = node.querySelector('a').textContent;
  var m_name = "godmode";
  var price = node.querySelector('.text-right>div').textContent;
         if(data_server==3194&&data_side==52&&data_online==1&&name!=godmode)//проверяю чтобы все совпадало          
        window.console.log(price.match(/[0-9.]+/)[0]);
}


когда хотел сделать проверку по нику, не является ли он моим, на эту строку начало ругаться на
скрытый текст

Выделить код

Код:

if(data_server==3194&&data_side==52&&data_online==1&&name!=godmode)

(ReferenceError: godmode is not defined, line 12 (Error code: -991))

как правильно получить результат = самая низкая цена: как-то отрезать все что после первой строки с помощью регулярных выражений? или это можно как-то в циклах указать? чтобы после первой занесенной успешно (самой дешевой цены) остальное не чекать/сохранять в переменную price

Отредактировано gødmøde (15-09-2019 23:52:06)

Отсутствует

 

№615-09-2019 23:58:56

InfSub
iMacroModer
 
Группа: Moderators
Откуда: DeepTown
Зарегистрирован: 13-05-2013
Сообщений: 3319
UA: Chrome 76.0
Веб-сайт

Re: Вытянуть данные при совпадении нескольких условий

gødmøde

gødmøde пишет

(ReferenceError: godmode is not defined, line 12 (Error code: -991))

вам же русским языком написано, нет такой переменной в вашем скрипте, если вы сверяете значение переменной name с текстом, текст обрамляется кавычками

gødmøde пишет

как правильно получить результат = самая низкая цена

для сравнения значений, извлеките их в массив и отсортируйте:

скрытый текст
Войдите или зарегистрируйтесь, чтобы увидеть скрытый текст.

gødmøde пишет

чтобы после первой занесенной успешно (самой дешевой цены) остальное не чекать/сохранять в переменную price

как вы себе представляете возможность не проверяя все числа (цены) - понять, что эта самая низкая?


Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox


на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!

Отсутствует

 

№716-09-2019 00:43:20

gødmøde
Участник
 
Группа: Members
Зарегистрирован: 14-09-2019
Сообщений: 22
UA: Chrome 76.0

Re: Вытянуть данные при совпадении нескольких условий

про кавычки вы правильно подметили, просто в этом коде, такой ошибки нету даже без кавычек

скрытый текст

Выделить код

Код:

var macro;
macro =  "CODE:";
var node = window.document.querySelector('tr[data-href]');
var data_server = node.getAttribute('data-server');
var data_side = node.getAttribute('data-side');
var data_online = node.getAttribute('data-online');
var name = node.querySelector('a').textContent;
var price = node.querySelector('.text-right>div').textContent;
if(data_server==3194&&data_side==52&&data_online==1&&name!=godmode){
window.console.log(price.match(/[0-9.]+/)[0]);
}


по поводу проверки всех чисел чтобы понять какая из них самая низкая :  дело в том что самое первое занесенное число оно всегда самое низкое, потому что сортировка стоит на сайте от большего к меньшему)

Отсутствует

 

№816-09-2019 00:54:48

InfSub
iMacroModer
 
Группа: Moderators
Откуда: DeepTown
Зарегистрирован: 13-05-2013
Сообщений: 3319
UA: Chrome 76.0
Веб-сайт

Re: Вытянуть данные при совпадении нескольких условий

gødmøde пишет

про кавычки вы правильно подметили, просто в этом коде, такой ошибки нету даже без кавычек

значит парсер не добрался до этой строки из-за несовпадения условий ранее

gødmøde пишет

дело в том что самое первое занесенное число оно всегда самое низкое, потому что сортировка стоит на сайте от большего к меньшему)

и в чем проблема тогда извлечь цену из

скрытый текст

Выделить код

Код:

<div>9.96 ₽</div>


например так:
скрытый текст

Выделить код

Код:

/<div>(.*?) ₽<\/div>/


Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox


на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!

Отсутствует

 

№916-09-2019 01:06:44

gødmøde
Участник
 
Группа: Members
Зарегистрирован: 14-09-2019
Сообщений: 22
UA: Chrome 76.0

Re: Вытянуть данные при совпадении нескольких условий

я с js как и с программированием в общем знаком 2 дня
если честно я не совсем понимаю что вы написали, а также не совсем понимаю куда это вставлять)

скрытый текст

Выделить код

Код:

/<div>(.*?) ₽<\/div>/


ну дело в том что  мне не просто нужно получить самую верхнюю цену, а чтобы эта цена соответствовала моим критериям
1 data-server=9792
2 data-side=52
3 data-online=1
ну за подсказку с массивом - спасибо, буду дерзать

Отредактировано gødmøde (16-09-2019 01:08:01)

Отсутствует

 

№1016-09-2019 01:17:29

InfSub
iMacroModer
 
Группа: Moderators
Откуда: DeepTown
Зарегистрирован: 13-05-2013
Сообщений: 3319
UA: Chrome 76.0
Веб-сайт

Re: Вытянуть данные при совпадении нескольких условий

исходя из вашего кода думаю что тут правильнее было бы написать name!=m_name

gødmøde пишет

ну дело в том что  мне не просто нужно получить самую верхнюю цену, а чтобы эта цена соответствовала моим критериям

ну так вы ее получаете судя по коду:

скрытый текст

Выделить код

Код:

if(data_server==3194&&data_side==52&&data_online==1&&name!=godmode){
window.console.log(price.match(/[0-9.]+/)[0]);
}


только она у вас выводится в консоль
напишите
скрытый текст

Выделить код

Код:

alert(price.match(/[0-9.]+/)[0]);


вместо window.console.log если не умеете пользоваться консолью
если все верно, то в дальнейшем просто замените
скрытый текст

Выделить код

Код:

window.console.log(price.match(/[0-9.]+/)[0]);


на
скрытый текст

Выделить код

Код:

var small_price = price.match(/[0-9.]+/)[0];


где small_price - переменная с минимальной ценой

Добавлено 16-09-2019 01:23:12
если я правильно понимаю то при срабатывании всех условий в:

скрытый текст

Выделить код

Код:

if(data_server==3194&&data_side==52&&data_online==1&&name!=m_name)


вы получите верную самую низкую цену и вопрос собственно только в выходе из цикла?
если да, то после:
скрытый текст

Выделить код

Код:

window.console.log(price.match(/[0-9.]+/)[0]);


пишите break;

Отредактировано InfSub (16-09-2019 01:23:12)


Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox


на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!

Отсутствует

 

№1116-09-2019 01:27:38

gødmøde
Участник
 
Группа: Members
Зарегистрирован: 14-09-2019
Сообщений: 22
UA: Chrome 76.0

Re: Вытянуть данные при совпадении нескольких условий

консолью я пользуюсь)
и с таким кодом

скрытый текст

Выделить код

Код:

var nodes = window.document.querySelectorAll('tr[data-href]');
    for (i=0;i<nodes.length;i++) {
var node = nodes[i];
var data_server = node.getAttribute('data-server');
var data_side = node.getAttribute('data-side');
var data_online = node.getAttribute('data-online');
var name = node.querySelector('a').textContent;
var m_name = "godmode";
var price = node.querySelector('.text-right>div').textContent;
  if(data_server==3194&&data_side==52&&data_online==1&&name!=m_name)//проверяю чтобы все совпадало          
    window.console.log(price.match(/[0-9.]+/)[0]);
}


я получаю вот такой вот список цен в консоль
скрытый текст

Выделить код

Код:

10.00 
10.01  
10.33 
10.56
11.11 
11.62

Отредактировано gødmøde (16-09-2019 01:28:43)

Отсутствует

 

№1216-09-2019 01:34:29

InfSub
iMacroModer
 
Группа: Moderators
Откуда: DeepTown
Зарегистрирован: 13-05-2013
Сообщений: 3319
UA: Chrome 76.0
Веб-сайт

Re: Вытянуть данные при совпадении нескольких условий

gødmøde пишет

я получаю вот такой вот список цен в консоль

на сколько я понимаю, вам нужно остановить цикл сразу после 1й цены равной в данном случае 10.00
если я прав, то смотрите конец моего предыдущего поста, после "Добавлено Сегодня 01:23:12"


Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox


на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!

Отсутствует

 

№1316-09-2019 01:43:01

gødmøde
Участник
 
Группа: Members
Зарегистрирован: 14-09-2019
Сообщений: 22
UA: Chrome 76.0

Re: Вытянуть данные при совпадении нескольких условий

написал break; как вы сказали, теперь консоль пустая совсем

скрытый текст

Выделить код

Код:

var nodes = window.document.querySelectorAll('tr[data-href]');
    for (i=0;i<nodes.length;i++) {
var node = nodes[i];
var data_server = node.getAttribute('data-server');
var data_side = node.getAttribute('data-side');
var data_online = node.getAttribute('data-online');
var name = node.querySelector('a').textContent;
var m_name = "godmode";
var price = node.querySelector('.text-right>div').textContent;
  if(data_server==3194&&data_side==52&&data_online==1&&name!=m_name)//проверяю чтобы все совпадало          
    window.console.log(price.match(/[0-9.]+/)[0]);
    break;
}


мне кажется цикл проверил первый href, там не нашел ничего из того что мне подходит и свернулся break;

Отредактировано gødmøde (16-09-2019 01:48:13)

Отсутствует

 

№1416-09-2019 01:50:33

InfSub
iMacroModer
 
Группа: Moderators
Откуда: DeepTown
Зарегистрирован: 13-05-2013
Сообщений: 3319
UA: Chrome 76.0
Веб-сайт

Re: Вытянуть данные при совпадении нескольких условий

gødmøde
фигурные скобки пропущены у вас, для одной команды после if не критично, но для двух и более ...

скрытый текст

Выделить код

Код:

if(data_server==3194&&data_side==52&&data_online==1&&name!=m_name){//проверяю чтобы все совпадало          
    window.console.log(price.match(/[0-9.]+/)[0]);
    break;
};


Добавлено 16-09-2019 01:54:07
синтаксис if(...):
Войдите или зарегистрируйтесь, чтобы увидеть скрытый текст.

Отредактировано InfSub (16-09-2019 01:54:07)


Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox


на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!

Отсутствует

 

№1516-09-2019 02:01:45

gødmøde
Участник
 
Группа: Members
Зарегистрирован: 14-09-2019
Сообщений: 22
UA: Chrome 76.0

Re: Вытянуть данные при совпадении нескольких условий

вот так заработало, спасибо!

Отсутствует

 

№1616-09-2019 02:27:37

Squatter
Участник
 
Группа: Members
Зарегистрирован: 11-05-2017
Сообщений: 123
UA: Chrome 64.0

Re: Вытянуть данные при совпадении нескольких условий

gødmøde пишет

ну дело в том что  мне не просто нужно получить самую верхнюю цену, а чтобы эта цена соответствовала моим критериям
1 data-server=9792
2 data-side=52
3 data-online=1

Вы плохо ознакомились с предложенными мануалами.

Пишете селекторы атрибутов без пробелов, чтобы получить только ноды соответствующие значениям data-server="9792", data-side="52" и data-online="1"

Собираете в массив все цены из полученных нод и находите минималную цену

скрытый текст

Выделить код

Код:

var nodes = window.document.querySelectorAll('[data-server="9792"][data-side="52"][data-online="1"]');
var arr = [];
for (i=0;i<nodes.length;i++) {
  var price = nodes[i].querySelector('.text-right>div').textContent;
  // Собираем в массив "arr" значения преобразованные к числу
  arr.push(+price.match(/[0-9.]+/)[0]);
}
// Отфильтровываем из массива "arr" минимальное число
var min_price = Math.min.apply(Math, arr);

// Смотрим в консоль
window.console.log(arr);
window.console.log(min_price);

Отсутствует

 

№1716-09-2019 18:07:43

gødmøde
Участник
 
Группа: Members
Зарегистрирован: 14-09-2019
Сообщений: 22
UA: Chrome 76.0

Re: Вытянуть данные при совпадении нескольких условий

дело в том что "я" уже написал вот такой код

скрытый текст

Выделить код

Код:

//чекаю свою цену
var nodes = window.document.querySelectorAll('tr[data-href]');
    for (i=0;i<nodes.length;i++) {
var node = nodes[i];
var data_server = node.getAttribute('data-server');
var data_side = node.getAttribute('data-side');
var data_online = node.getAttribute('data-online');
var name = node.querySelector('a').textContent;
var m_name = "godmode";
var m_price = node.querySelector('.text-right>div').textContent.match(/[0-9.]+/)[0];
  if(data_server==3194&&data_side==52&&data_online==1&&name==m_name){//проверка сервак, сторона, онлайн, мой ник          
    window.console.log(m_price);
    //alert(m_price);
  break;}
}
//чекаю чужую самую низкую цену
var nodes = window.document.querySelectorAll('tr[data-href]');
    for (i=0;i<nodes.length;i++) {
var node = nodes[i];
var data_server = node.getAttribute('data-server');
var data_side = node.getAttribute('data-side');
var data_online = node.getAttribute('data-online');
var name = node.querySelector('a').textContent;
var m_name = "godmode";
var price = node.querySelector('.text-right>div').textContent.match(/[0-9.]+/)[0];
  if(data_server==3194&&data_side==52&&data_online==1&&name!=m_name){//проверяю чтобы все совпадало          
    window.console.log(price);
  break;} 
}
//проверяю, если цена другого продавца ниже или = моей цене
if(price <= m_price){
alert(price);
}
//проверяю, если моя цена меньше чем другого продавца
else if(m_price < price){
alert(m_price);    
}


ознакомился с вашим кодом с массивом, он выглядит более логичным, но дело в том что как оказалось мне еще потребуется проверка имени продавца, или идентификация себя по этому имени, для последующего сравнения цены своей, с минимальной ценой остальных
если бы можно было бы вот так сделать начало последнего предложенного вами кода
скрытый текст

Выделить код

Код:

var name = "godmode";
var nodes = window.document.querySelectorAll('[data-server="9792"][data-side="52"][data-online="1"][a!=name]');


но походу это не так работает) что бы убедится что цена не моя
начал я проводить эксперименты над регулярными выражениями, ох и головоломка
хочу в цифре 8.496434 оставить лишь 8.49
скрытый текст

Выделить код

Код:

window.console.log(pricetax.match(/^\d+\.\d{0,2}$/));


но мне говорят pricetax.match is not a function, что тут не хватает/подходит? какой функции? пытался менять регулярку на (/[0-9.]+/)[0] но в этой строке он отказывается ее выводить!

Отредактировано gødmøde (17-09-2019 02:01:06)

Отсутствует

 

№1817-09-2019 03:11:09

Squatter
Участник
 
Группа: Members
Зарегистрирован: 11-05-2017
Сообщений: 123
UA: Chrome 64.0

Re: Вытянуть данные при совпадении нескольких условий

pricetax.match is not a function потому что pricetax у вас это уже число а не строка. Метод match() работает со строками а не числами

скрытый текст

Выделить код

Код:

var pricetax = "8.496434";// Сейчас строка

window.console.log(pricetax.match(/\d+\.\d{2}/)[0]);

// Или преобразуем число в строку с помощью метода String()
var pricetax = 8.496434;// Сейчас число

window.console.log(String(pricetax).match(/\d+\.\d{2}/)[0]);


Читайте о типе данных в JS и о преобразовании типов
скрытый текст
Войдите или зарегистрируйтесь, чтобы увидеть скрытый текст.

gødmøde пишет

проверка имени продавца, или идентификация себя по этому имени

Одним циклом всё это сортируете по условию в объект, а потом сравниваете.

Отредактировано Squatter (17-09-2019 03:12:11)

Отсутствует

 

№1917-09-2019 14:37:12

gødmøde
Участник
 
Группа: Members
Зарегистрирован: 14-09-2019
Сообщений: 22
UA: Chrome 76.0

Re: Вытянуть данные при совпадении нескольких условий

большое спасибо за предыдущую помощь, не могли бы вы мне еще объяснить как определить правильно форму?
я постоянно чтобы что-то написать на js ищу похожие образцы кода в "интернетах", если точного аналога нету, начинаю перебирать разные варианты из "похожего"
может есть какой браузер/плагин чтобы при наведении на элемент в коде он мне писал "Вася искомый тобой заветный value="102.2" относится к (условно) getElementsByName('offers[3230][52][price]');
мне кажется что мои способы решения моих задач, аналогичны с попыткой езды на велосипеде с квадратными колесами

скрытый текст

Выделить код

Код:

<input class="form-control price" name="offers[3230][52][price]" value="102.25" autocomplete="off" type="text">


я уже перечитал все гайды, в поиске подобного образца, ну не укладывается в моей голове, хочется понять логику раз и навсегда, а не брутить разные варианты "авось щас заработает!"
в этот раз я собраллся найти графу value = которая принадлежит offers[3230][52][price] и заполнить ее по своему желанию
скрытый текст

Выделить код

Код:

document.getElementsByName('offers[3230][52][price]').value = 25252;
document.getElementsByClassName("offers[3199][54][price]")[0].value="43434";


ну естественно как и всегда, ничего не произошло)

Отредактировано gødmøde (17-09-2019 19:30:58)

Отсутствует

 

№2017-09-2019 23:12:24

gødmøde
Участник
 
Группа: Members
Зарегистрирован: 14-09-2019
Сообщений: 22
UA: Chrome 76.0

Re: Вытянуть данные при совпадении нескольких условий

еще вот так пробовал, не непомогло

скрытый текст

Выделить код

Код:

window.document.getElementsByClassName('input[name=offers[3199][54][price]]').value="TEXT";


потом нашел на форуме инфу что можно через window.document.querySelector
и сделал так
скрытый текст

Выделить код

Код:

window.document.querySelector('input[name=offers[3199][54][price]]').value="TEXT";


но результат прежний(

Отсутствует

 

№2117-09-2019 23:50:19

Squatter
Участник
 
Группа: Members
Зарегистрирован: 11-05-2017
Сообщений: 123
UA: Chrome 64.0

Re: Вытянуть данные при совпадении нескольких условий

Не гадайте. Потратьте 30 минут на изучение селекторов

скрытый текст

Выделить код

Код:

window.document.querySelector('.form-control.price').value="Test input";


Ссылки вам уже выше дал и примеров масса.

Отсутствует

 

№2218-09-2019 14:16:19

gødmøde
Участник
 
Группа: Members
Зарегистрирован: 14-09-2019
Сообщений: 22
UA: Chrome 76.0

Re: Вытянуть данные при совпадении нескольких условий

опять здравствуйте) не могли бы вы мне объяснить как происходит такая магия:

скрытый текст

Выделить код

Код:

var cop = (0.01);// 1 копейка
var cop2 = (0.02);
var verh = (m_price+cop2);// верхний упор (моя цена +2 коп)
var pricetax = (price*tax);
var pricelast = (pricetax-cop);//конечная цена -1 копейка
window.console.log(+pricetax +"-1 копейка = " +pricelast); //проверил как работает отнимание 1 копейки
window.console.log(+m_price +" + " +cop2 +" = " +verh); //проверяю как работает прибавление 2 копеек


две абсолютно аналогичные ситуации, но одна отнимает (правильно), а вторая прибавляет(не совсем правильно)
вот что выдал лог
7.899893999999999-1 копейка = 7.889893999999999
9.14 + 0.02 = 9.140.02
ну я примерно подозреваю что код думает что я пытаюсь сложить квадратное с холодным, но почему отнимание тогда работает как надо??

Отсутствует

 

№2318-09-2019 15:12:54

Squatter
Участник
 
Группа: Members
Зарегистрирован: 11-05-2017
Сообщений: 123
UA: Chrome 64.0

Re: Вытянуть данные при совпадении нескольких условий

Выше ссылку давал о типе данных и преобразовании типов. Читайте до понимания.
Прежде чем осуществлять арифметические действия, убедитесь, что значения переменных приведены к правильному типу (number).

Вам уже объяснил аналогичную вашу ошибку


Как об стенку горох… :angry:

Отредактировано Squatter (18-09-2019 15:18:41)

Отсутствует

 

№2418-09-2019 16:37:10

gødmøde
Участник
 
Группа: Members
Зарегистрирован: 14-09-2019
Сообщений: 22
UA: Chrome 76.0

Re: Вытянуть данные при совпадении нескольких условий

да это я понял, я уже исправил это вот так

скрытый текст

Выделить код

Код:

var m_price = Number(node.querySelector('.text-right>div').textContent.match(/[0-9.]+/)[0]);


но понять почему  с отниманием все в порядке не могу
ведь  я оба значения парсил одинаково, с тем лишь отличием что одна из цен принадлежит мне, а другая кому-то
скрытый текст

Выделить код

Код:

var m_price = (node.querySelector('.text-right>div').textContent.match(/[0-9.]+/)[0]); //идентифицирую свою цену по собственному нику
  if(data_server==3194&&data_side==52&&name==m_name)
и доставал цену продавца
var price = node.querySelector('.text-right>div').textContent.match(/[0-9.]+/)[0];
  if(data_server==3194&&data_side==52&&data_online==1&&name!=m_name){


но почему в конечном результате могло случится так что у них оказались разные типы?(дико извиняюсь если эти вопросы вам покажутся глупыми!)

И есчо: сегодня я для себя открыл такую новинку как GET запрос,  и очумел когда увидел скорость работы своего скрипта на нём, это быстрее раза в 4 точно.
И собственно хотел у вас поинтересоваться о таком:
мой скрипт парсит цену, как только она не сама "лучшая" он нажимает кнопку "продать" и там там вводит новую актуальную цену, так вот вопрос собственно в чем, можно ли миновать загрузку второй страницы(пусть даже методом гет? зачем она мне?там где формы для цен/количества) ведь мне никакая информация от нее не нужна, мне бы просто отправить свой запрос с новыми ценами "не отходя от кассы" с основной страницы это реально? или это я бред нашифровал себе?

Отредактировано gødmøde (19-09-2019 00:00:40)

Отсутствует

 

№2519-09-2019 02:27:25

InfSub
iMacroModer
 
Группа: Moderators
Откуда: DeepTown
Зарегистрирован: 13-05-2013
Сообщений: 3319
UA: Chrome 76.0
Веб-сайт

Re: Вытянуть данные при совпадении нескольких условий

gødmøde пишет

но понять почему  с отниманием все в порядке не могу

вычитанием, ну хоть пишите-то по русски, отнимают деньги в темном переулке

символ "+" это не только сложение чисел, это также конкатенация строк, в случае если с одной стороны строка (а со страницы сайта вы получаете именно строку), а с другой число, при использовании "+" вы получите не сложение, а конкатенацию строк
чтобы этого избежать нужно явно указать, что это не строка, а число

Добавлено 19-09-2019 02:30:22

gødmøde пишет

не бы просто отправить свой запрос с новыми ценами

отправьте, если на стороне сайта нет каких-то ограничений или доп проверок, то скорее всего работать будет, но скорее всего будет не через GET а через POST

Отредактировано InfSub (19-09-2019 02:30:22)


Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox


на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!

Отсутствует

 
  • Форумы
  •  » iMacros
  •  » Вытянуть данные при совпадении нескольких условий

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]