Chrome Webdriver не может завершить автоматизацию оформления заказа - PullRequest
0 голосов
/ 06 октября 2018

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

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

Я не уверен, почему это происходит.Любая помощь будет оценена.What I am describing

Редактировать: Я использовал явное ожидание для загрузки динамического содержимого (т. Е. HTML теперь соответствует ожидаемому HTML полностью загруженной страницы (т. Е.

*)1013 *<button type="submit" title="Place Order" class="button btn-checkout" onclick="review.save();"><span><span>Place Order</span></span></button>

теперь существует, но он все еще загружается бесконечно. Я не уверен, какие другие элементы ждать.

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Если вы столкнулись с проблемой заказа на указанном сайте, пожалуйста, убедитесь, что сайт не ведет себя по-разному, пока вы оформляете заказ с одинаковыми данными вручную.

Пока я пробовал оформить заказ гостяна том же сайте я столкнулся с ошибкой тайм-аута подключения в следующем API

POST https://www.converse.ca/braintree/checkout/quoteTotal/ net :: ERR_CONNECTION_TIMED_OUT

, что привело к тому, что счетчик продолжает вращаться.

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

Пока он попадает в секцию Order Review, вы должны использовать явное условие ожидания, готово ли место или кнопка.см. ниже код

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

 WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "button[title='Place Order']")).click()

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

 WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "review-please-wait"))

ПРИМЕЧАНИЕ: Убедитесь, что время ожиданиядостаточно для каждого раздела, пока информация не будет загружена, потому что в то время, когда вы выбираете какую-либо опцию, происходит вызов API.Так что это может вызвать сбой вашего скрипта, потому что ваш скрипт в порядке, но система не готова.

0 голосов
/ 06 октября 2018

Вы использовали find_element_by_xpath ()?В этом случае дайте некоторое неявное время ожидания, чтобы получить все веб-ресурсы.Например,

driver = wevdriver.Chrome()
driver.implicitly_wait(3)
driver.find_element_by_xpath().click()
...