使用Python 3.5&amp ;;检查HTML页面中的复选框。硒

时间:2016-12-27 19:24:02

标签: javascript python selenium checkbox web-scraping

我正在尝试使用Python 3.5和Selenium选择HTML页面上显示的所有复选框。最终目标显然是操纵它们,但我甚至无法正确选择它们。

我无法向您提供确切的网址,因为它是eBay上的特殊页面,您需要连接才能看到它。那么,这里是如何访问我感兴趣的网页:

  1. 转到https://signin.ebay.co.uk/ws/eBayISAPI.dll
  2. 创建帐户或登录
  3. 连接时转到http://cgi5.ebay.co.uk/ws/eBayISAPI.dll?SellHub3
  4. 键入" iPhone"或者你想要的任何品牌,它并不重要,点击“开始销售”#34;按钮。
  5. 你在页面上。
  6. 您可以看到,如果您输入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,值或名称选择它们。我需要检测页面中所有复选框的内容并将它们放在列表中。

    感谢您的帮助

2 个答案:

答案 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()

但是你知道为什么页面仍然没有"听"点击复选框?我的意思是,蓝色按钮应该变成蓝色并且可以点击"单击一个复选框后。