【问题标题】:Is it possible to get a checkbox with Mechanize other than name attribute?除了名称属性之外,是否可以使用机械化复选框?
【发布时间】:2021-03-13 12:46:10
【问题描述】:

我一直在尝试使用 Ruby 和 Mechanize 进行抓取。
我看到的网站说获取复选框并检查它的方法如下。

form.checkbox_with(:name => 'name').check

但是,我想要获取的复选框没有名称属性。
相反,它有一个类属性。是否可以像下面那样做,或者有没有其他方法可以实现它?

form.checkbox_with(:class => 'class_name').check
form.checkbox_with(:class_name => 'class_name').check

版本
导轨:5.2.4.4
红宝石:2.6.3
机械化:2.7.6

【问题讨论】:

    标签: ruby-on-rails ruby web-scraping mechanize


    【解决方案1】:

    根据source code是的。

    def elements_with singular, plural = "#{singular}s"
      class_eval <<-CODE
        def #{plural}_with criteria = {}
          selector = method = nil
          if String === criteria then
            criteria = {:name => criteria}
          else
            criteria = criteria.each_with_object({}) { |(k, v), h|
              case k = k.to_sym
              when :id
                h[:dom_id] = v
              when :class
                h[:dom_class] = v
              when :search, :xpath, :css
      ...
    

    所以你可以使用任何一个

    form.checkbox_with(class: 'class_name').check
    # OR by xpath
    form.checkbox_with(xpath: '//*[@id="someId"]/a[1]').check
    # OR by id
    form.checkbox_with(id: 'someId').check
    

    【讨论】:

    • 非常感谢您告诉我。我不知道为什么,但我无法通过方式获得元素。我会尝试另一个。
    猜你喜欢
    • 2015-09-04
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2021-05-01
    • 2013-01-30
    • 1970-01-01
    相关资源
    最近更新 更多