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

Выделить код

Код:

var rowslength=1
for (i=1;i<=rowslength;i++) {
var q;

q= "CODE:";
q+="SET !DATASOURCE_DELIMITER ;" + "\n";
q+= "SET !DATASOURCE C:\\Users\\M\\Documents\\iMacros\\Datasources\\1.txt" + "\n";
q+="SET !DATASOURCE_COLUMNS 3" + "\n";
q+= "SET !DATASOURCE_LINE "+i+ "\n";
q+= "ADD !EXTRACT {{!COL1}}" + "\n";
q+= "ADD !EXTRACT {{!COL2}}" + "\n";
q+= "ADD !EXTRACT {{!COL3}}" + "\n";
iimPlay(q)
var q1= iimGetLastExtract(1)
var q2= iimGetLastExtract(2)
var q3= iimGetLastExtract(3)


}


господа, знатоки подскажите, пожалуйста, как посчитать количество строк в txt файле(rowslength)?

для JS так
var aaa="тут содержимое файла"
var tmp=aaa.split("\n");// нарезаем данные в массив по символу перевода строки - \n
alert(aaa.lenght) - длинна массива = колчество строк.

okkamas_knife
спасибо! а как обратиться к "содержимому файла"-указываю путь к нему?

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

okkamas_knife пишет

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

Спасибо за подсказку, разобрался. Помоему будет смысл эту переменную ааа использовать дальше... без замедлений скорости... а возможно ли обращаться к отдельным элементам массива?

09-03-2017 06:17:10
к той же самой первой колонке например?

zzz[0] первый элемент массива
zzz[1] второй
итд вместо цифры можно юзать переменную

зы извиняюсь что ввёл тут в заблуждение (только сейчас заметил)
var tmp=aaa.split("\n");// нарезаем данные в массив по символу перевода строки - \n
alert(aaa.lenght)  - тут конечно же tmp.lenght  - нам же массив нужен а не переменная непорезанная
кстати
var xxx="abcde"
alert(xxx[3]) выведет d

okkamas_knife
удалено, избыточное цитирование
многое проясняется, но многое еще не понятно))). с массивом более или менее ясно... записал один раз и обращаешься потом-быстрее. а вот как обратно закинуть в txt элементы, для конкретного случая те же q1 q2 и q3 и если я в тот же файл буду вносить у меня же ошибки не будет...типа файл используется... или массив изменился?

InfSub

то что считал остаётся в памяти независимым отдельным объектом
так что если внёс в файл изменения то ессно надо перечитать его.
если надо занести массив с изменениями в файл
то

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

Выделить код

Код:

var out="";
for (var i = 0; i < massiv.length ; i++){
out=out+massiv[i]+"\n";//добавляем очередную строку из массива и перевод строки
};


и соответственно out записываешь в файл

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

.буду разбираться с синтаксисом на практике

1 есличто все мои примеры - javascript/
2 насчет синтаксиса - справочники коих полно что по js что по имакросу + примеры + гугл
вот увидел в коде split - гуглишь javascript+split+пример
не знаешь как сделать чтото - сначала сформулируй четко и потом гугли
3 правильно представляешь

спасибо!

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

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

Выделить код

Код:

var zzz='содержимое1'
var xxx='содержимое2'
for (i=0;i<length;i++){
content=zzz[i];
content1=xxx[i];
var c=('tag pos=1*')
if (c===1){append} // тут не знаю как по другому реализовать, ориентируюсь просто на кнопку, без текста


но тут косяк в том что zzz.length!=xxx.length
и вот когда i>zzz.length(zzz.length<xxx.length) ошибка, логично как бы... но хотелось бы чтобы она не прерывалась, а начала с i=0, понимаю что чета простое, но никак не пойму что именно. например если сделаю
скрытый текст

Выделить код

Код:

for (i=0;i<length;i++){
content=zzz[i];
   for (j=0;j<length;j++){
   content1=xxx[j];


то тут я так понимаю при i=0 он отработает все j, а надо чтобы они параллельно шли... не допру как это должно быть

InfSub

непонятно что хочешь получить в итоге.
принцип таков
1 чётко формулируешь хотелку со всеми нюансами и мелочами
2 расписываешь алгоритм получения хотелки, проходишься по нему причем с учетом различнх моментов типа а что будет если а больше б а что если наоборот итд итп
3 и только отработав алгоритм начинаешь воплощать его в код.

okkamas_knife
удалено, избыточное цитирование
Хочу иметь непрерывную работу скрипта по смене юзер агента и прокси. у меня есть 500 юсер агентов в 1.csv и 5000 прокси в 2.csv. меняю через конфиг.  Я подгружаю агенты в массив zzz, а прокси в xxx. и прогоняю их одним циклом. тут после каждой загрузки, получается, надо чекать...прокси заведомо хорошие... если не рабочие, как юзер так и прокси страница не загрузится, я так понимаю. Если страница загрузилась идем дальше, если нет i=i+1. вроде все... дошли до последнего юзер агента и тут надо начинать сначала именно по юзерам т.е. if i=zzz.length then i=0, но тогда же и прокси начнутся с первого...вот тут и не могу понять логику, что делать нужно чтобы прокси продолжили с 501, а юзеры с 0

замечание
InfSub

вот тут и не могу понять логику, что делать нужно чтобы прокси продолжили с 501, а юзеры с 0

теперь понятно
самый простой быдлокодерский ;) вариант сделать массивы равными по длинне
ua - массив юзерагентов
var ual=длинна массива юзерагентов
var counter=0
var uanew=[];
for (i=0;i<длинна массива прокси;i++){
if (counter<ual){ проверяем счетчик если в пределах то
uanew.push(ua[counter])  добавляем в новый массив очередного юзерагента
counter=counter+1 увеличиваем счетчик
}else{counter=0;} иначе обнуляем счетчик
}
и такстолько раз сколько элементов в массиве проксей.

минус - больше памяти
плюсы проще код и меньше циклов и условных переходов
потом просто юзаешь proxy[i] и uanew[i]

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

самый простой быдлокодерский ;)

он мне подходит, пока)
с траблами, как всегда.

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

Выделить код

Код:

var c=iimplay('tag pos=1*')
if (c===1){append}


тут я объявил переменную с и если есть элемент на который нужно тапнуть, то с=1, а вот если нет, то как бы ошибка. есть какая нибудь функция чтобы выдало 1, если элемент существует? желательно средствами макроса-чтобы без дрочи с селекторами, не понимаю чет как это работает. во а может быть как то к значению ошибки можно обратиться? типа, если элемента не существует тогда с=error, а я тут такой, если c=error то alert('ты лучший прогер')

Бек пишет

а может быть как то к значению ошибки можно обратиться

а почитать FAQ не?

InfSub пишет

а почитать FAQ не?

решил все таки функцию сделать, много "чеков". кстати, если правильно читал, FAQ был полезен, но все равно удалено, 3.3 ненормативная лексика, че тут не так

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

Выделить код

Код:

function IsTest(selector) { var k=0; var elems = document.querySelectorAll(selector);  if (elems!=null) {k=1}  return k;}

IsTest('input[type="submit"]')=m
alert (m)


код публикуется в тегах code внутри спойлера

InfSub

Бек
RTFM по js rtfm.gif

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

Выделить код

Код:

function IsTest(selector) {return Object.keys(window.document.querySelectorAll(selector)).length;};

m=IsTest('div[id="p732897"]');
alert(m);
m=IsTest('div[id="p732897000"]');
alert(m);

InfSub пишет

RTFM по js

пробую, пока с переменным успехом. Уже второй день не могу понять, к чему привязывается "обновление" значения в "input". т.е. заполняю форму, например для мэила и если значение в форме "правильное" (например имя-'Вася'), то должен меняться код-'...success...' для конкретного случая. если нажать на мышь в произвольном месте, то все хорошо-работает. попробовал сделать .click(), но не то.

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

Выделить код

Код:

GetId('noPhoneLink').click()
while('block')


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

Выделить код

Код:

do {
do {  
I = GetClass("inPut");
I[0].value = 'Вася'
while('success')

всем, привет! Надеюсь у вас все хорошо, как минимум лучше, чем у меня с js. В общем следуя вашим рекомендациям получилось-таки написать скрипт, мой первый скрипт, всего за месяц. Вроде работает, нормально, потом ненормально...опять нормально...и так по кругу. определить в чем проблема-тяжело. поэтому хотелось бы получать обратную связь от скрипта, чтобы фиксить, то что неправильно работает, хотя бы пытаться. хочу реализовать это(обратную связь) через iimDisplay-буду кидать туда то что мне надо и то что выдает сам макрос тоже буду видеть(в основном он выдает траблы, как мне кажется). но могу ли я как то сохранять содержимое окна? пытался так реализоватьЖ

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

Выделить код

Код:

function WriteLog() { 
    var Cc=Components.classes, Ci=Components.interfaces, LofFile='C:\\log.txt';
    var pref=Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
    pref.getCharPref("???", LogValue);    //пытаюсь по имени настройки считать "значение" и присвоить переменной LogValue, но имени не знаю
    imns.FIO.appendTextFile(imns.FIO.openNode(LogFile),LogValue)
}


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

Бек
если вы пытаетесь отловить ошибки iMacros (а из вашего пространного монолога - очень сложно понять, что же именно вы пытаетесь поймать...), то iimGetErrorText() без каких-либо pref.getCharPref("???", LogValue);

InfSub пишет

iimGetErrorText()

Понял-для поиска ошибок есть свои методы, не извращаться, спасибо(не пишу сразу, дабы не флудить, но благодарности моей нет предела, Вы-лучший :) )!
там, кстати, проблема была из разряда var q='кто дурак'; var q='js'.
больше так делать не буду!
переделываю, задача:все так же смена юзера- айпи, данные для замены из файла и без "window.q".
проблемы: changeProgy, предположительно, работает неправильно-1.бежит по всем возвращает последний cheker, понимаю, что замкнуть надо, но как это делается не пойму; 2. не уверен, что она будет выполнять свою основную функцию-смену прокси, хотя скорее да и опять же будет последнее значение; 3. пугающая  меня до жути, чтобы вызвать ее, очень много параметров надо передать-запутаться "два пальца"
подсобите, как можно исправить проблемы, для кого то проблемки. и если не сложно дайте ссылку на готовый-хороший-ненужный код, не могу найти. спасибо, буду очень признателен! и, если есть еще какие либо "глобальные", не опечатки, проблемы, тоже, пожалуйста сообщите.

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

Выделить код

Код:

function () {
        for (var i = 0; i < this.readFile.str.length; i++) {
            var ip = this.readFile.str[i];
            var Cc = Components.classes, Ci = Components.intereadFileaces;
            var pref=Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
            pref.setIntPref("network.proxy.type", 1); 
            pref.setBoolPref("network.proxy.share_proxy_settings", true); 
            pref.setCharPref("network.proxy.http", ip); 
            var cheker = this.checkProxy;
        } return cheker;

Бек пишет

дайте ссылку

В FAQ есть обучающее видео, в том числе по работе с прокси
Плюс поиск по разделу imacros по слову proxy, на сколько я помню, где-то обсуждалось, скорее всего в теме про капчи

InfSub пишет

В FAQ есть обучающее видео

спасибо Вам!!! можно закрыть тему

Тема перенесена из форума «iMacros» в форум «Архив тем».