#node.js #puppeteer
#node.js #кукловод
Вопрос:
Я хочу использовать Puppeteer для ввода значения в поле ввода. Я сделал это для большей части веб-страницы, но у меня возникла реальная проблема с определенным полем, у которого нет идентификатора или хорошей метки.
вот элементы проверки
<div class="retype-security-code"><input type="text" class="form-text mask-cvv-4" aria-label="Security code" placeholder="CVV2" value=""><img src="https://c1.neweggimages.com/WebResource/Themes/Nest/images/cvv2_sm.gif" alt="cvv2"></div>
<input type="text" class="form-text mask-cvv-4" aria-label="Security code" placeholder="CVV2" value="">
вот некоторый код, с которым я играл
while (true) {
try {
await page.waitForSelector('#cvv2Code' , {timeout: 500})
await page.type('#cvv2Code', config.cv2)
break
}
catch (err) {}
try {
await page.waitForSelector('#creditCardCVV2' , {timeout: 500})
await page.type('#creditCardCVV2', config.cv2)
break
}
catch (err) {}
try {
await page.waitForSelector('#app > div > section > div > div > form > div.row-inner > div.row-body > div > div:nth-child(3) > div > div.checkout-step-body > div.checkout-step-done > div.card > div.retype-security-code > input' , {timeout: 500})
await page.focus('#app > div > section > div > div > form > div.row-inner > div.row-body > div > div:nth-child(3) > div > div.checkout-step-body > div.checkout-step-done > div.card > div.retype-security-code > input')
await page.keyboard.type('###')
break
}
catch (err) {}
}
Ответ №1:
Почему вы используете #cvv2Code
и #creditCardCVV2
как селекторы, когда их нет ни в вашем HTML-коде, ни на картинке?
Этот класс form-text mask-cvv-4
кажется разумным вариантом для поля:
await page.waitForSelector('.form-text.mask-cvv-4');
Эти селекторы в блоке последней попытки слишком длинные, их невозможно поддерживать и их трудно читать, избегайте написания таких селекторов.
Кроме того, пожалуйста, добавьте все соответствующие сообщения об ошибках к вашему вопросу, без этого вам сложно помочь.
Комментарии:
1. Извините, что не ясно написал это слишком поздно ночью. Первые 2 части кода, где можно перехватить любые другие версии, которые иногда появляются, и я больше не уверен, появляются ли они вообще. Причина отсутствия какого-либо сообщения об ошибке заключается в том, что я его не получаю, он просто сидит там, ничего не делая. Причина последнего селектора заключается в том, что когда вы щелкаете правой кнопкой мыши и копируете из элементов проверки и копируете селектор, это то, что вы получаете. спасибо за вашу помощь.
2. @AGenovez не могли бы вы поделиться сайтом, чтобы я мог попробовать? Я здесь немного слеп, попробовать было бы лучше.
3. его проверка в newegg
4. Это похоже на платную стену после завершения оформления заказа. Я не думаю, что смогу это сделать.
5. черт возьми, хорошо, в любом случае спасибо за помощь. Я чувствую, что перепробовал каждый селектор, который может найти для этого одного элемента, и не могу его запустить.
Ответ №2:
Я обнаружил, что вы можете найти элемент, используя querySelector
, а затем использовать setAttribute
, чтобы присвоить элементу идентификатор. Итак, что-то вроде
await page.evaluate(() => {
const inputBox = document.querySelector(".form-text mask-cvv-4");
inputBoxes.setAttribute('id', 'inputBox1');
});
await page.type("#inputBox1", "yourText");
Если у элемента есть дочерние элементы, вам просто нужно получить дочерние элементы из элемента. Если есть несколько элементов с тегом class, вы можете использовать querySelectorAll
и перебирать этот список.