#python #selenium
Вопрос:
Я автоматизирую скрипт, который выбирает количество продукта, но на этом конкретном сайте используются кнопки /- щелчок и нет выпадающего списка или поля ввода для количеств, считываемых из CSV.
Вместо того, чтобы имитировать нажатия кнопок /- для количеств, вы можете вручную отредактировать приведенный ниже HTML-код с нужным номером и нажать кнопку «Добавить в корзину» для того же эффекта.
Можно ли редактировать HTML, когда на сайте нет формы для этого? Или мне нужно эмулировать клики для нужного количества. Я использую Pandas для чтения CSV и работаю с кодом из другого проекта.
Спасибо, если вы можете помочь
https://www.matsukiyo.co.jp/store/online/p/4902888248269
<ul class="count">
<li>数量</li>
<li class="minus disable"><a href="#">-</a></li>
<li class="num" id="addToCartQty" data-code="99">1</li>
<li class="plus"><a href="#">+</a></li>
</ul>
Вы можете изменить значение data-code="99">1</li>
с 1 на 99, и оно обновится, но возможно ли это в Selenium, так как я не могу найти правильный селектор для этого. У меня такое чувство, что это невозможно?
Текущий код, который я пытаюсь использовать, отправляет клики, но я не могу отправить нужное количество кликов и в любом случае застрял в поиске решения.
Как я могу отправить значение из CSV, чтобы указать количество кликов? Или как я могу записать значение в HTML li?
driver.get(web_url str(UPC[i]))
try:
driver.find_element(By.LINK_TEXT, "+").click
# I want to add the number of clicks here(str(quantity[i]))
link = driver.find_element_by_css_selector("p.button.cart")
link.click()
except:
print("Product Number: " str(UPC[i]) " Sold Out!")
Ответ №1:
Как я вижу, элемент, содержащий счетчик, расположен по идентификатору=’addToCartQty’, так что вы можете просто
driver.find_element_by_css_selector('#addToCartQty').sendKeys("your value");
или
driver.find_element_by_css_selector('#addToCartQty').sendKeys("value", "your value");
или
element = driver.find_element_by_css_selector('#addToCartQty')
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("arguments[0].value='enter the value here';", element);
Не подделывайте, чтобы изменить «ваше значение» или «введите значение здесь» с номером, который вы хотите ввести там.
Комментарии:
1. Спасибо за ответ, к сожалению, поскольку addToCartQty не является выбираемым элементом на веб-странице, клавиши отправки не обновляют значение в li, и операция не выполняет числовой ввод с использованием предложенных селекторов CSS, я попробовал Javascript, похоже, он должен работать, но я не знаком с JS, я только добавил значение и запустил код без успеха, я буду тестировать дальше, но изначально это не сработало, возможно, по тем же причинам, что и выше, Спасибо за вашу помощь
2. Хорошо, вы пробовали работать с JavaScript? Третий вариант.
Ответ №2:
Можно отредактировать html и выполнить скрипт с помощью метода execute_script()
script="document.getElementsByClassName('num')[0].value=" your_value " ;"
driver.execute_script(script)
Вы можете проверить это,запустив скрипт в консоли браузера, он выведет требуемое значение в html-тег.
Комментарии:
1.
script="driver.find_element_by_css_selector('#addToCartQty')[0].value=" 3 " ;" driver.execute_script(script) element = driver.find_element_by_ID('#addToCartQty') JavascriptExecutor jse = (JavascriptExecutor) driver; jse.executeScript("arguments[0].value='3';", element);
@Prophet @Aswin K Спасибо за предложения, однако, потратив несколько часов на тестирование, результат всегда один и тот же, и я не могу изменить значение с помощью JS, я попробовал несколько различных комбинаций селекторов, класса, идентификатора, xpath, все безрезультатно2. Я попробовал вышеупомянутую консоль браузера, и следующий результат равен 3, но фактическое значение не записывается в класс «num»
document.getElementsByClassName('num')[0].value="3'
. Могу ли я что-нибудь предоставить, чтобы помочь лучше понять и решить проблему? Спасибо, если у вас есть какие-либо дополнительные предложения