15.11.2017, 12:07
|
Аспирант
|
|
Регистрация: 27.02.2017
Сообщений: 65
|
|
Сообщение от рони
|
start плохое имя для функции, может переименовать
|
Увы, но это тоже роли не играет
|
|
15.11.2017, 12:08
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,791
|
|
Сообщение от Nikolay37
|
Ну я могу в целом это в переменную записать, смысл не изменится
|
Изменится.
|
|
15.11.2017, 12:12
|
Аспирант
|
|
Регистрация: 27.02.2017
Сообщений: 65
|
|
Сообщение от Nexus
|
У вас в логике работы дырень.
Текущий код будет проверять только первый элемент выборки на соответствие его контента значению эл. массива basename.
Попробуйте так:
let baseName = "apple,pineapple,translate".split(',')
let i = 0
let n = 0
let nodes = document.getElementsByClassName('name');
console.log('Найдено элементов: ' + nodes.length);
start()
function start() {
for (i; i < nodes.length; i++) {
console.log(nodes[i].innerText + ' == ' + baseName[n] + ' -> ' +
(nodes[i].innerText == baseName[n] ? 'true' : 'false'));
if (nodes[i].innerText == baseName[n]) {
console.log('CLICK');
nodes[i].click();
break; //Если нужно кликнуть только по одному элементу
}
}
if (n < baseName.length - 1) {
i = 0
n++
console.log('Restart');
start()
}
}
|
В логике все хорошо, поскольку нужно проверить несколько элементов. С break скрипт начинает отлично работать, но это не то что нужно, поскольку надо кликнуть по нескольким элементам.
Кстати прошу заметить, ваш код тоже не работает, если убрать оттуда break
|
|
15.11.2017, 12:44
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,791
|
|
Сообщение от Nikolay37
|
В логике все хорошо, поскольку нужно проверить несколько элементов.
|
let baseName = "apple,pineapple,translate".split(',')
let i = 0
let n = 0
function start() {
for (i; i < document.getElementsByClassName('name').length; i++) {
if (document.getElementsByClassName('name')[i].innerText == baseName[n]) {
document.getElementsByClassName('name')[i].click()
}
if (n < baseName.length - 1) {
i = 0
n++
start()
}
}
}
Что тут хорошего?
Вы пытаетесь в 6-й строке пробежаться по всем элементам с классом "name", но сразу же в конце первой итерации вызываете эту функцию вновь сбрасывая счетчик "i" и инкрементируя значение "n". Т.е. при втором вызове этой функции проверяться будет снова первый элемент с классом "name", но уже искомое значение будет другим.
После того, как счетчик "n" превысит baseName.length продолжат выполняться предыдущие циклы. Они будут проверять соответствие контента элементов (начиная со второго и до конца) с классом "name", но т.к. n==baseName.length, то искать циклы будут элемент, чей контент равен null. Т.е. условие для элементов с индексом > 1 никогда не выполнится, поскольку строка никогда не будет равна null (равна !== эквивалентна).
Upd. [][1]===undefined, т.е. в тексте выше "null" читайте как "undefined", но сути не меняет.
Последний раз редактировалось Nexus, 15.11.2017 в 12:54.
|
|
15.11.2017, 12:46
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,791
|
|
Сообщение от Nikolay37
|
Кстати прошу заметить, ваш код тоже не работает, если убрать оттуда break
|
Смотрите консоль, там отображается исчерпывающая информация.
Пофиксить баг труда не составит.
|
|
15.11.2017, 13:17
|
Аспирант
|
|
Регистрация: 27.02.2017
Сообщений: 65
|
|
Сообщение от Nexus
|
Что тут хорошего?
Вы пытаетесь в 6-й строке пробежаться по всем элементам с классом "name", но сразу же в конце первой итерации вызываете эту функцию вновь сбрасывая счетчик "i" и инкрементируя значение "n". Т.е. при втором вызове этой функции проверяться будет снова первый элемент с классом "name", но уже искомое значение будет другим.
После того, как счетчик "n" превысит baseName.length продолжат выполняться предыдущие циклы. Они будут проверять соответствие контента элементов (начиная со второго и до конца) с классом "name", но т.к. n==baseName.length, то искать циклы будут элемент, чей контент равен null. Т.е. условие для элементов с индексом > 1 никогда не выполнится, поскольку строка никогда не будет равна null (равна !== эквивалентна).
Upd. [][1]===undefined, т.е. в тексте выше "null" читайте как "undefined", но сути не меняет.
|
Прошу прощенья, ошибся чутка, вот правильный код, который я использовал. Сначала не увидел ошибки:
let baseName = "apple,pineapple,translate".split(',')
let i = 0
let n = 0
function start() {
for (i; i < document.getElementsByClassName('name').length; i++) {
if (document.getElementsByClassName('name')[i].innerText == baseName[n]) {
document.getElementsByClassName('name')[i].click()
}
}
if (n < baseName.length - 1) {
i = 0
n++
start()
}
}
Если открыть debugger в начале исполнения фун-и, то она работает хорошо и клик по элементу срабатывает
Последний раз редактировалось Nikolay37, 15.11.2017 в 13:22.
|
|
15.11.2017, 13:26
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,217
|
|
Сообщение от Nikolay37
|
Рекурсия нужна для того, чтобы перечислять мои элементы из baseName
|
Для "перечисления" используют циклы.
|
|
15.11.2017, 13:27
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,217
|
|
Сообщение от Nikolay37
|
вот правильный код
|
Полный пример с тегами хтмл мы так и не увидим?
|
|
15.11.2017, 15:48
|
Аспирант
|
|
Регистрация: 27.02.2017
Сообщений: 65
|
|
Сообщение от ksa
|
Полный пример с тегами хтмл мы так и не увидим?
|
<div id="items">
<div class="scrollbar">
<div class="item" data-error="" data-bot_id="37" data-price="5336" data-asset_id="12677286778" data-market_hash_name="M4A1-S | Cyrex (Field-Tested)" data-name="m4a1-s | cyrex (field-tested)">
<a href="steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198418960881A12677286778D13862166415325500362" class="btn-inspect">Inspect</a><span class="price">5,336</span>
<div class="image"><img src="https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpou-6kejhz2v_Nfz5H_uO1gb-Gw_alIITSj3lU8Pp8j-3I4IG721Hh_UM_YmilJY7DegI4Nw7Y8we4wO-9hJG76pzImHsy7ygh7HyMnAv330-QA3A95Q"/></div>
<span class="name">M4A1-S | Cyrex (Field-Tested)</span>
</div>
<div class="item" data-error="" data-bot_id="37" data-price="26460" data-asset_id="12677286746" data-market_hash_name="AK-47 | Fuel Injector (Well-Worn)" data-name="ak-47 | fuel injector (well-worn)">
<a href="steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198418960881A12677286746D9559139697008051705" class="btn-inspect">Inspect</a><span class="price">26,460</span>
<div class="image"><img src="https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpot7HxfDhnwMzJemkV08-jhIWZlP_1IbzUklRc7cF4n-SPpIr33gS1rkJqYGD7J4GQcQY5aFCG-lHrlO650JLv6ZzMziA2vXMgtmGdwULg8tCd0w"/></div>
<span class="name">AK-47 | Fuel Injector (Well-Worn)</span>
</div>
<div class="item" data-error="" data-bot_id="37" data-price="6090" data-asset_id="12677215278" data-market_hash_name="M4A4 | 龍王 (Dragon King) (Minimal Wear)" data-name="m4a4 | 龍王 (dragon king) (minimal wear)">
<a href="steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198418960881A12677215278D7254987710742629388" class="btn-inspect">Inspect</a><span class="price">6,090</span>
<div class="image"><img src="https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpou-6kejhjxszFJTwW0924l4WYg-X1P4Tdn2xZ_ItyiO2Yot-n3gztrUduMW6icdWcc1RqM1HR_FfswLu6gZe4tZrNmiBkpGB8smM7Zio1"/></div>
<span class="name">M4A4 | 龍王 (Dragon King) (Minimal Wear)</span>
</div>
<div class="item" data-error="" data-bot_id="37" data-price="79700" data-asset_id="12677151027" data-market_hash_name="★ Bayonet | Forest DDPAT (Battle-Scarred)" data-name="★ bayonet | forest ddpat (battle-scarred)">
<a href="steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198418960881A12677151027D9430682923177156928" class="btn-inspect">Inspect</a><span class="price">79,700</span>
<div class="image"><img src="https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpotLu8JAllx8zAaAJG6My3gL-DkvbiKvXXz29XucMoibnArY6s2AXn8kRvZW76LYWSJFdoNwrV_1e2yezuhJbqot2Xnvb67xpg"/></div>
<span class="name">★ Bayonet | Forest DDPAT (Battle-Scarred)</span>
</div>
<div class="item" data-error="" data-bot_id="37" data-price="5317" data-asset_id="12676401658" data-market_hash_name="AK-47 | Orbit Mk01 (Minimal Wear)" data-name="ak-47 | orbit mk01 (minimal wear)">
<a href="steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198418960881A12676401658D9261165439988559703" class="btn-inspect">Inspect</a><span class="price">5,317</span>
<div class="image"><img src="https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpot7HxfDhnwMzJegJB49C5mpnbxsjmNr_ummJW4NE_iL-ZrYj03wLl_hFqNm71cteWdlA5Zl2F-FG-yO_r0cW4uMnMynFl6T5iuyjnxSwaOw"/></div>
<span class="name">AK-47 | Orbit Mk01 (Minimal Wear)</span>
</div>
<div class="item" data-error="" data-bot_id="37" data-price="52140" data-asset_id="12676164519" data-market_hash_name="★ Shadow Daggers | Scorched (Field-Tested)" data-name="★ shadow daggers | scorched (field-tested)">
<a href="steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198418960881A12676164519D16161770010107986788" class="btn-inspect">Inspect</a><span class="price">52,140</span>
<div class="image"><img src="https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpovbSsLQJfw-bbeQJR_OOylZCbm_LLPr7Vn35cppwl2-vAot6n0Aa3_Uo_amv3dYKcewRsYl7V_QDql-fu15fv75TPznF9-n515DsDCZ4"/></div>
<span class="name">★ Shadow Daggers | Scorched (Field-Tested)</span>
</div>
<div class="item" data-error="" data-bot_id="37" data-price="27660" data-asset_id="12676144964" data-market_hash_name="AK-47 | Case Hardened (Field-Tested)" data-name="ak-47 | case hardened (field-tested)">
<a href="steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198418960881A12676144964D876729287817217943" class="btn-inspect">Inspect</a><span class="price">27,660</span>
<div class="image"><img src="https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpot7HxfDhhwszHeDFH6OO7kYSCgvq6Yu-EwzsIuZIj3uiY99WmiwGx_kc9Zjr6JYHBIwM5MFHX-Fi9w-u-1Ij84soNG54bQA"/></div>
<span class="name">AK-47 | Case Hardened (Field-Tested)</span>
</div>
<div class="item" data-error="" data-bot_id="37" data-price="23420" data-asset_id="12676074732" data-market_hash_name="StatTrak™ AWP | Fever Dream (Field-Tested)" data-name="stattrak™ awp | fever dream (field-tested)">
В let baseName = "StatTrak™ AWP | Fever Dream (Field-Tested)".split(',') Любые из имен. (В данном случае беру только 1, но по сути нужно несколько)
Этого достаточно или вообще весь код?
|
|
15.11.2017, 16:06
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,217
|
|
Nikolay37, у тебя извращенное понятие тестового примера.
Убери из этого фарша не нужную информацию.
|
|
|
|