按钮元素不可交互

时间:2020-03-19 06:35:16

标签: python-3.x xml selenium-webdriver button element

我一直在Python 3.8中为以下网站https://fasttimes.com.au/(使用Magento构建的网站)构建自动结帐脚本,并且所有按钮,下拉菜单,输入等均已起作用。根据python控制台显示,在运送选择阶段,该按钮用于保存运送详细信息并允许进入开票阶段; “消息:元素不可交互”。

我尝试使用execute_script直接与该网站进行交互,这不会产生错误并表示已完成,但是实际上在WebDriver中并未单击该按钮,因此继续进行下一步操作。不会结帐。至于“行动链”。它们只是产生上面的错误,与通过XPATHCSS_Selector查找相同。我尝试使用导入的“键”并尝试使用ENTER键操作按钮,以及使用WebDriver替代.send_keys(u'\ue007')都无济于事。在下面提到之前,我还尝试使用等待,但是也许我做错了吗?

例如

element = WebDriverWait(driver, 15).until(
ec.presence_of_element_located((By.ID, "login:guest")))

如果上面的行格式不正确,请纠正我

站点的HTML如下:

<div class="buttons-set" id="shipping-method-buttons-container">
    <p class="back-link"><a href="#" onclick="checkout.back(); return false;"><small>« </small>Back</a></p>
    <button type="button" class="button" onclick="shippingMethod.save()"><span><span>Continue</span></span></button>
    <span id="shipping-method-please-wait" class="please-wait" style="display:none;">
        <img src="https://static.fasttimes.com.au/skin/frontend/ultimo/default/images/opc-ajax-loader.gif" alt="Loading next step..." title="Loading next step..." class="v-middle"> Loading next step...        </span>
</div> 

我当前的代码是:

driver.find_element_by_xpath("//*[@id='shipping-method-buttons-container']/button").send_keys(u'\ue007')

任何建议将不胜感激。我相信我要与之互动的按钮是

<button type="button" class="button" onclick="shippingMethod.save()"><span><span>Continue</span></span></button>

...但是我不太确定。我感觉到现在为止我已经用尽了所有可能的途径,但是我拒绝相信这个该死的按钮不是很棘手!谢谢:)

1 个答案:

答案 0 :(得分:0)

正如您提到的那样,您想进入 Billing 阶段,据我了解,您处于结帐流程的第1步。之所以这样说,是因为您用xpath //*[@id='shipping-method-buttons-container']/button所标识的是第4步运输方法中的按钮,实际上这还不是很棘手。

您需要先选择“结帐方法”,然后从此处进行。试试看:

driver.find_element_by_id('login:guest').click()  # select the "Checkout as Guest" radio button
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='onepage-guest-register-button']")))
driver.find_element_by_xpath("//*[@id='onepage-guest-register-button']").click()  # click Continue

或者,如果是第4步,那么您真的会停留在:

WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='shipping-method-buttons-container']/button")))
driver.find_element_by_xpath("//*[@id='shipping-method-buttons-container']/button").click()