我正在尝试使用Python 3.5和Selenium选择HTML页面上显示的所有复选框。最终目标显然是操纵它们,但我甚至无法正确选择它们。
我无法向您提供确切的网址,因为它是eBay上的特殊页面,您需要连接才能看到它。那么,这里是如何访问我感兴趣的网页:
您可以看到,如果您输入iPhone',eBay建议您从以下所有类别中选择一个:
手机&通信
移动&智能手机
手机& PDA配件>其他手机配件
其他手机
智能手表
手机& PDA配件>电缆&适配器
手机配件
手机& PDA配件>充电器&码头
手机& PDA配件>耳麦
手机& PDA配件>案例&盖
批发&工作很多
其他批发&工作很多
我的目标是勾选第一个复选框,无论页面上有多少复选框。我只是想检查第一个。这很简单。在这个例子中,这意味着选中复选框" Mobile&智能手机"。
我尝试了XPATH方法:
checkBox = driver.find_elements_by_xpath(" .//输入[@type ='复选框']")
但是当我尝试print(checkBox)时,它会返回[](=无)。这很奇怪,因为在Firefox中,这个XPATH正好给了我所需要的东西。
我也尝试用类名选择它:
checkBox = driver.find_elements_by_class_name(' inpChkBox')
但是,当我尝试打印时,它没有任何结果。
如何生成页面上所有复选框的列表,以便在之后操作它们?
似乎所有复选框的ID,名称等都是唯一的并自动生成,因此我无法通过其ID,值或名称选择它们。我需要检测页面中所有复选框的内容并将它们放在列表中。
感谢您的帮助
答案 0 :(得分:0)
我也不确定该页面是否有框架,但我通常这样做。
driver.switch_to.default_content()
在我刮掉元素之前。然后我使用这个函数来查询元素。
def get_element(by_arg, by_method=By.ID):
return WebDriverWait(driver, MAX_TIMEOUT).until(
EC.presence_of_element_located((by_method, by_arg))
)
所以对你的情况来说就是。
check_box = get_element(".//input[@type='checkbox']", By.XPATH)
答案 1 :(得分:0)
你确实是对的,没有选择正确的iframe,因此我无法与其复选框进行互动。
driver.switch_to.frame(driver.find_element_by_id(' catFrame')) driver.find_element_by_css_selector(' div.idtTopSm tr输入')。click()
但是你知道为什么页面仍然没有"听"点击复选框?我的意思是,蓝色按钮应该变成蓝色并且可以点击"单击一个复选框后。