如何使用Selenium和Python单击HTML中的单选按钮

2024-10-04 01:26:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用以下html代码单击元素:

<div class="delivery-pseudo-table">
<div class=" i-popup-lk user-address" id="userAddress">
<div class="address-container">
<div class="titlebar">
<h1 class="title"></h1>
</div>
<div id="userAddressContent"></div>
</div>
<div class="hide j-map map" id="addressMap"></div>
<div class="hide j-map-pickpoint postamat-map" id="pickpointMap"></div>
<div class="added-addres-loader"></div>
</div>
<ul class="delivery-method" data-jsv-df=""><li class="selfDelivery selectDeliveryWay active" data-jsv="#34_#35_" title="">
<script type="jsv#37_"></script>
<label><input autocomplete="off" checked="checked" data-id="2" name="orderDetails.DeliveryWay_q" type="radio" value="Self"/>Самовывоз</label>
<script type="jsv/37_"></script>
</li><li class="courierDelivery selectDeliveryWay" data-jsv="/35_#38_" title="">
<script type="jsv#39_"></script>
<label><input autocomplete="off" data-id="1" name="orderDetails.DeliveryWay_q" type="radio" value="Courier"/>Доставка курьером</label>
<script type="jsv/39_"></script>
</li><li class="wbpostamatDelivery selectDeliveryWay" data-jsv="/38_#40_" title="">
<script type="jsv#41_"></script>
<label><input autocomplete="off" data-id="16" name="orderDetails.DeliveryWay_q" type="radio" value="WbPostamat"/>Постамат</label>
<script type="jsv/41_"></script>
</li></ul>

我需要按一下“信使”值的按钮

我尝试用以下Python代码来实现:

^{pr2}$

(我也尝试通过xpath找到)

但它说元素是看不见的。有什么方法可以点击这些元素吗?在


Tags: divid元素mapinputdatatitletype
2条回答

根据您共享的HTML,<ul>标记包含许多JavaScripts,因此要在所需元素上调用click(),您必须诱导WebDriverWait,使元素可点击,您可以使用以下任一解决方案:

  • CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "ul.delivery-method li.courierDelivery.selectDeliveryWay input[value='Courier']"))).click()
    
  • XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='delivery-method']//li[@class='courierDelivery selectDeliveryWay']//input[@value='Courier']"))).click()
    

尝试使用以下xPath:

//input[@type='radio' and @value='Courier']

同时尝试使用WebDriverWait

^{pr2}$

注意:您必须添加一些导入:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

WebDriverWait语句等待至少10秒,直到元素可单击,然后才单击它。在

PS:更多关于WebDriverWait的信息可以找到here。在

编辑:尝试执行JavaScript:

^{4}$

相关问题 更多 >