【问题标题】:How to loop through and click on relevant items如何循环并点击相关项目
【发布时间】:2016-02-09 22:43:43
【问题描述】:

下面我有四个单选按钮,每个按钮选择一个乘客。

<input checked="checked" name="passenger" id="passenger-0" data-passengerindex="0" type="radio">
    <input checked="checked" name="passenger" id="passenger-1" data-passengerindex="1" type="radio">
    <input checked="checked" name="passenger" id="passenger-2" data-passengerindex="2" type="radio">
    <input checked="checked" name="passenger" id="passenger-3" data-passengerindex="3" type="radio">

下面是一段代码,显示一排座位(第 6 排),一些婴儿座位 (class="seat infant") 和其他普通座位(普通座位是座位 noinfant - class="seat noinfant" 和座位 class="seat"

    <td>
        <a href="#6A" title="Seat Suitable for Infants 6A" data-seat="6A" data-seatid="81374518" data-seatgroup="0" class="seat  infant" data-personid="" data-infantseat="True">
            <span>Seat Suitable for Infants 6A</span>
        </a>
    </td><td>
        <a href="#6B" title="Seat Suitable for Infants 6B" data-seat="6B" data-seatid="81374519" data-seatgroup="0" class="seat  infant" data-personid="" data-infantseat="True">
            <span>Seat Suitable for Infants 6B</span>
        </a>
    </td>
    <td>
        <a href="#6C" title="Seat Suitable for Infants 6C" data-seat="6C" data-seatid="81374520" data-seatgroup="0" class="seat  infant" data-personid="" data-infantseat="True">
            <span>Seat Suitable for Infants 6C</span>
        </a>
    </td>
        <td class="aisle">6</td>
    <td>
        <a href="#6D" title="Seat Suitable for Infants 6D" data-seat="6D" data-seatid="81374522" data-seatgroup="1" class="seat  noinfant" data-personid="" data-infantseat="True">
            <span>Seat Suitable for Infants 6D</span>
        </a>
    </td>
    <td>
        <a href="#6E" title="Seat Suitable for Infants 6E" data-seat="6E" data-seatid="81374523" data-seatgroup="1" class="seat" data-personid="" data-infantseat="True">
            <span>Seat Suitable for Infants 6E</span>
        </a>
    </td>
    <td>
        <a href="#6F" title="Seat Suitable for Infants 6F" data-seat="6F" data-seatid="81374524" data-seatgroup="1" class="seat  infant" data-personid="" data-infantseat="True">
            <span>Seat Suitable for Infants 6F</span>
        </a>
    </td>
</tr>

选择座位后,会发生以下情况:

  • 婴儿座椅的班级从 class="seat infant" 更改为 class="seat infant reserved selected
  • 普通座位 - class="seat noinfant"class="seat noinfant reserved selectedclass="seat"class="seat reserved selected

以下是我需要帮助实施的内容:

从第 1 行开始并继续

  • 对于前两名乘客,请单击下一个可用的婴儿 座位(每个婴儿座位一名乘客)
  • 对于最后两名乘客,单击从第 1 行开始的任意座位 以后

我们不需要实际选择乘客,因为他们是在选择座位后自动选择的,并且在页面加载时已经选择了第一位乘客。

有没有人因为我只使用了 4 天的 Python,所以几乎没有高级的知道如何实现上述内容?

【问题讨论】:

    标签: python python-2.7 selenium selenium-webdriver


    【解决方案1】:

    这个想法是:

    • 根据乘客是否有婴儿(data-hasinfant 属性),决定选择哪个座位
    • 使用带有 not() 的 CSS 类选择器来获得未选择和未保留的座位

    示例实现:

    for passenger in driver.find_elements_by_css_selector("ol.passengerlist li[data-personid]"):
        passenger.click()
    
        has_infant = passenger.get_attribute("data-hasinfant")
    
        # choose seats
        if has_infant:
            # select a non-selected infant seat
            seat = driver.find_element_by_css_selector(".planebody a.seat.infant:not(.reserved):not(.selected)")
        else:
            # select a non-reserved non-selected seat
            seat = driver.find_element_by_css_selector(".planebody a.seat:not(.reserved):not(.selected)")
    
        print("Passenger: %s, choosing seat: %s" % (passenger.text.strip(), seat.get_attribute("data-seat")))
        seat.click()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      相关资源
      最近更新 更多