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

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.
  • Форумы
  •  » 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 мои условия выше) в файл или переменную
 

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


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


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


Но мне не нужен весь этот текст, а только цена 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 (тоесть цену)
вообщем в моей голове появилось несколько вариантов решения моей же задачи, но вот только инструментов для ее реализации там пока недостаточно(
буду признателен тому кто направит на путь истинный...

Выделить код

Код:

<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>

Отсутствует

 

№215-09-2019 01:58:12

Squatter
Участник
 
Группа: Members
Зарегистрирован: 11-05-2017
Сообщений: 112
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
Сообщений: 112
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" то там уже совсем другая история) туда пока еще я не дошел

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


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


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

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

Выделить код

Код:

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]);
}

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

Отсутствует

 

№615-09-2019 23:58:56

InfSub
iMacroModer
 
Группа: Moderators
Откуда: DeepTown
Зарегистрирован: 13-05-2013
Сообщений: 3269
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
Сообщений: 3269
UA: Chrome 76.0
Веб-сайт

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

gødmøde пишет

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

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

gødmøde пишет

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

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

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


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


Выделить код

Код:

<div>9.96 ₽</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 дня
если честно я не совсем понимаю что вы написали, а также не совсем понимаю куда это вставлять)

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


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

Выделить код

Код:

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

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

Отсутствует

 

№1016-09-2019 01:17:29

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

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

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

gødmøde пишет

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

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

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


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


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


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


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

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

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


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


пишите break;

Выделить код

Код:

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

Отредактировано 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]);
}

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

Отсутствует

 

№1216-09-2019 01:34:29

InfSub
iMacroModer
 
Группа: Moderators
Откуда: DeepTown
Зарегистрирован: 13-05-2013
Сообщений: 3269
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; как вы сказали, теперь консоль пустая совсем

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


мне кажется цикл проверил первый href, там не нашел ничего из того что мне подходит и свернулся 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;
}

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

Отсутствует

 

№1416-09-2019 01:50:33

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

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

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

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


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

Выделить код

Код:

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: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
Сообщений: 112
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: Вытянуть данные при совпадении нескольких условий

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

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


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


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


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

Выделить код

Код:

//чекаю свою цену
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);    
}

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

Отсутствует

 

№1817-09-2019 03:11:09

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

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

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

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


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

gødmøde пишет

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

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

Выделить код

Код:

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]);

Отредактировано 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]');
мне кажется что мои способы решения моих задач, аналогичны с попыткой езды на велосипеде с квадратными колесами

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


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


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

Выделить код

Код:

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

Отредактировано 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.querySelector
и сделал так
скрытый текст


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

Выделить код

Код:

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

Отсутствует

 

№2117-09-2019 23:50:19

Squatter
Участник
 
Группа: Members
Зарегистрирован: 11-05-2017
Сообщений: 112
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: Вытянуть данные при совпадении нескольких условий

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

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


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

Выделить код

Код:

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 копеек

Отсутствует

 

№2318-09-2019 15:12:54

Squatter
Участник
 
Группа: Members
Зарегистрирован: 11-05-2017
Сообщений: 112
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: Вытянуть данные при совпадении нескольких условий

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

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


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


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

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

Выделить код

Код:

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

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

Отсутствует

 

№2519-09-2019 02:27:25

InfSub
iMacroModer
 
Группа: Moderators
Откуда: DeepTown
Зарегистрирован: 13-05-2013
Сообщений: 3269
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–2011 Mozilla Russia
Язык отображения форума: [Русский] [English]