无法单击跨度 Selenium Python 内的单选按钮

Posted

技术标签:

【中文标题】无法单击跨度 Selenium Python 内的单选按钮【英文标题】:Cannot click a radio button inside a span Selenium Python 【发布时间】:2018-08-09 00:50:59 【问题描述】:

我正在尝试单击跨度内的单选按钮。尝试执行:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys 


chromeDriver = webdriver.Chrome()
chromeDriver.get('https://www.flytap.com/pt-br/')

#Works Fine
chromeDriver.find_element_by_id('origin')
origin.click()
origin.clear()
origin.send_keys('(RIO) Rio De Janeiro -  todos os aeroportos , Brasil')
    origin.click()

#Where I got the error
milesBox = chromeDriver.find_element_by_id("booking-type-2").click()

#Also tried:
milesBox = chromeDriver.find_element_by_id("booking-type-2").send_keys(Keys.ENTER)

#And, finally:
milesBox = chromeDriver.find_element_by_id("booking-type-2").send_keys(Keys.SPACE)

这是我得到的错误:

ElementNotVisibleException: Message: element not visible

html 代码:

<!-- Payment Methods START -->
                <fieldset id="booking-payment-drag" class="booking-payment">
                    <div class="toolbar-radio-wrapper">
                        <legend class="ipt-label">Reservar com:</legend>
                    </div>
                    <div class="toolbar-radio-wrapper">
                        <div class="radio">
                            <span class="checked"><input type="radio" id="booking-type-1" name="booking-type" value="1" checked></span>
                        </div>
                        <label for="booking-type-1" class="ipt-label">Dinheiro</label>
                    </div>
                    <div class="toolbar-radio-wrapper js-country-not-eligible">
                        <div class="radio">
                            <span class=""><input type="radio" id="booking-type-2" name="booking-type" value="2"></span>
                        </div>
                        <label for="booking-type-2" class="ipt-label">Milhas</label>
                    </div>
                        <div class="toolbar-radio-wrapper">
                            <div class="radio is-disabled js-country-eligible">
                                <span class=""><input type="radio" id="booking-type-3" name="booking-type" value="3" disabled></span>
                            </div>
                            <label for="booking-type-3" class="ipt-label">Miles&Cash</label>
                                                        </div>
                </fieldset>

【问题讨论】:

您确定“booking-type-2”在您尝试点击时可见吗?在你的情况下,它似乎没有出现 【参考方案1】:

根据您共享的 HTML,单击 &lt;label&gt; 旁边的单选按钮,文本为 Milhas,您可以使用以下代码行:

chromeDriver.find_element_by_xpath("//input[@id='booking-type-2' and @name='booking-type']").click()

【讨论】:

谢谢,DebajanB,真的很有帮助:)【参考方案2】:

你可以使用这个 xpath

//div[@class='radio']//span//input[@id='booking-type-1']

//div[@class='radio']//span//input[@id='booking-type-2']

//div[@class='radio is-disabled js-country-eligible']//span//input[@id='booking-type-3']

【讨论】:

【参考方案3】:

origin 元素的下拉菜单似乎覆盖了您尝试单击的单选按钮。也许您可以更改操作顺序?单击destination 元素也会打开单选按钮所在的部分,但它似乎没有覆盖它。这是一个单击该单选按钮的快速示例,然后您可以在之后填写 origin 输入。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.flytap.com/pt-br/')

destination = driver.find_element_by_id('destination')
destination.click()

miles_box = driver.find_element_by_id('booking-type-2')
miles_box.click()

【讨论】:

以上是关于无法单击跨度 Selenium Python 内的单选按钮的主要内容,如果未能解决你的问题,请参考以下文章

使用 Selenium 使用 Python 单击按钮

无法使用 selenium python 获取多个跨度类文本

Python with Selenium:点击拦截并找到不同的跨度类

如何在内容可编辑的 div 内的嵌套跨度上触发事件?

如何通过 Selenium 和 Python 从 html 标签跨度获取文本

无法更改图像标签内的跨度高度和宽度