如何在 python 中用 selenium 单击复选框

How to click on checkbox with selenium in python

我正在尝试从某个网站中选择一个复选框。这是他们 HTML 代码的一部分。

<div class="deliveryCheckboxContainer">
                                                        
<input class="deliveryCheckbox hiddenCheckbox" id="deliveryCheckbox-684" data-deliveryid="684" type="checkbox" /><label for="deliveryCheckbox-684" class=" checkbox classic"></label>
        
</div>

我尝试了几种不同的方法。我收到一条错误消息,指出该元素不存在或无法与之交互。

这是我尝试过的示例:

browser.find_element_by_xpath('//*[@id="deliveryCheckbox-684"]').click()

可能是时间问题。许多页面在加载后动态构建 DOM 结构。

尝试在加载 URL 之后添加一两秒钟的睡眠,然后再尝试查找该元素。为了获得最大的稳健性,您可以将其置于循环中并在 10 秒左右后超时。

据我所知,在selenium中不能点击隐藏元素,class“hiddenCheckbox”暗示它确实是隐藏的。除此之外,包括你得到的错误和你试图抓取的网站将提供额外的帮助。目前我只能告诉你以某种方式使复选框可见。

尝试使用time.sleep()函数,看看它是否能够点击复选框。如果是,则使用 try 和 except 方法查找复选框是否已加载,然后单击它并继续。如上所述,睡眠功能不是一个好习惯。

如果程序无法找到复选框,请尝试通过 driver.find_element_by_id 导航到它。按 Id 导航元素是迄今为止我用过的最好的技术。

首先,检查上面关于计时问题的答案。 其次,我认为您正试图找到一个动态 ID 定位器。 尝试通过 css.

查找
browser.find_element_by_css_selector('.deliveryCheckbox.hiddenCheckbox').click()

此外,如果 label 是您真正需要单击的内容,请尝试使用 xpath:

browser.find_element_by_xpath("//label[contains(@for,'deliveryCheckbox')]")
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH,"//label[@for='deliveryCheckbox-684']"))).click()

您会等待元素可点击并点击 label 标签。

导入

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