【问题标题】:Check a checkbox in an HTML page with Python 3.5 & Selenium使用 Python 3.5 和 Selenium 选中 HTML 页面中的复选框
【发布时间】:2017-05-12 02:02:24
【问题描述】:

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

我不能只给你确切的 URL,因为它是 eBay 上的一个特殊页面,你需要连接才能看到它。所以,这里是访问我感兴趣的网页的方法:

  1. 转到https://signin.ebay.co.uk/ws/eBayISAPI.dll
  2. 创建帐户或登录
  3. 连接后转到http://cgi5.ebay.co.uk/ws/eBayISAPI.dll?SellHub3
  4. 输入“iPhone”或任何您想要的品牌,没关系,然后点击“开始销售”按钮。
  5. 您在页面上。

您可以看到,如果您输入“iPhone”,eBay 会建议您从以下所有类别中进行选择:

手机和通讯

手机和智能手机

手机和 PDA 配件 > 其他手机配件

其他手机

智能手表

手机和 PDA 配件 > 电缆和适配器

手机零件

手机和 PDA 配件 > 充电器和底座

手机和 PDA 配件 > 耳机

手机和 PDA 配件 > 保护套和保护套

批发和工作地段

其他批发和工作地段

我的目标是勾选第一个复选框,无论页面上有多少复选框。我只想检查第一个。就这么简单。在本例中,这意味着选中“移动和智能手机”复选框。

我试过XPATH方法:

checkBox = driver.find_elements_by_xpath(".//input[@type='checkbox']")

但是当我尝试 print(checkBox) 时,它返回 [ ] (=nothing)。这很奇怪,因为在 Firefox 中,这个 XPATH 正是我所需要的。

我也尝试用类名选择它:

checkBox = driver.find_elements_by_class_name('inpChkBox')

但是,当我尝试打印它时,它再次没有任何结果。

如何生成页面上所有复选框的列表,以便之后对其进行操作?

似乎所有复选框的 ID、名称等都是唯一的并且是自动生成的,所以我不能只通过它们的 ID、值或名称来选择它们。我需要能够检测页面中所有复选框并将它们放在列表中的东西。

感谢您的帮助

【问题讨论】:

  • 在获取元素之前,您确定您在正确的frame 中吗?
  • 嗨,马克,谢谢您的回答。我是 Selenium 的新手,所以我不确定。如何确保它是正确的框架?

标签: javascript python selenium checkbox web-scraping


【解决方案1】:

我也不确定该页面是否有框架,但我通常这样做。

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)

【讨论】:

  • 非常感谢。你能告诉我如何检查第一个复选框吗?我刚刚尝试了您的代码并添加了“check_box [0] .click()”但它不起作用,它会引发此错误:selenium.common.exceptions.TimeoutException:消息:
【解决方案2】:

您确实是对的,没有选择正确的 iframe,因此我无法与其复选框进行交互。

driver.switch_to.frame(driver.find_element_by_id('catFrame')) driver.find_element_by_css_selector('div.idtTopSm tr input').click()

但是你知道为什么页面仍然没有“听”到复选框的点击吗?我的意思是,一旦单击复选框,蓝色按钮应该变成蓝色并“可点击”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2013-10-12
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    相关资源
    最近更新 更多