我正在尝试自动在this website上结帐产品。但是,在最后一步,当应该单击一个按钮来提交付款时,该按钮只会加载并且付款既不会完成也不会被拒绝(弹出式窗口会告诉用户已被拒绝)。
如下图所示,订单信息只是无限期地保持“加载”或“旋转”。
编辑: 我使用了明确的等待方式来等待动态内容加载(即HTML现在与完全加载的页面的预期HTML相匹配(即
<button type="submit" title="Place Order" class="button btn-checkout" onclick="review.save();"><span><span>Place Order</span></span></button>
现在存在,但仍无限期加载。我不确定还有哪些其他元素。
答案 0 :(得分:1)
如果您在提到的站点上遇到订单问题,请确保在手动结帐具有相同详细信息的站点时,该站点没有其他行为。
虽然我在同一站点上尝试过访客用户结帐,但是在下面的API中却遇到了连接超时错误
POST https://www.converse.ca/braintree/checkout/quoteTotal/ 净:: 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调用。因此,这可能会导致脚本失败,因为您的脚本很好,但系统尚未就绪。
答案 1 :(得分:0)
您使用过find_element_by_xpath()吗? 在这种情况下,请提供一些隐式等待时间以获取所有Web资源。 例如,
driver = wevdriver.Chrome()
driver.implicitly_wait(3)
driver.find_element_by_xpath().click()