【发布时间】:2020-12-16 19:06:31
【问题描述】:
所以我一直在使用 selenium 尝试从我当地的 ymca 自动注册游泳点。我有这个页面,我正在尝试单击所有单圈复选框,然后单击下一页。
那个页面有这个html代码:
> <main class="scheduleVisitOnline container" role="main"> <!-- See
> app.jsx for React component --> <div
> id="schedule-visit-wizard-app">
> <div class="chooseMembersStep">
> <h1 class="page-title">
> Schedule a Visit
> </h1>
> <p>
> <strong>
> Ann Arbor YMCA
> </strong>
> <br/>
> <a href="#">
> Change Branch
> </a>
> </p>
> <div class="chooseMembersStep__members">
> <label class="control-label">
> Select visiting members and any reservation-only areas you intend to utilize
> </label>
> <table class="chooseMembersStep__members-table">
> <tbody>
> <tr class="chooseMembersStep__member">
> <td>
> <div class="pretty p-svg p-curve">
> <input checked="" id="member_3572218" type="checkbox"/>
> <div class="state p-success">
> <svg class="svg svg-icon" viewbox="0 0 20 20">
> <path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z"
> style="stroke: white; fill: white;">
> </path>
> </svg>
> <label>
> </label>
> </div>
> </div>
> </td>
> <td colspan="2">
> <label class="chooseMembersStep__member-name" for="member_3572218">
> Patrick McKeever
> </label>
> </td>
> </tr>
> <tr class="chooseMembersStep__member-area">
> <td>
> </td>
> <td class="chooseMembersStep__member-area-checkbox-col">
> <div class="pretty p-svg p-curve">
> <input id="3572218_39b9bf20-6493-4bd8-b2c4-6f6a4ab5a69d" type="checkbox"/>
> <div class="state p-success">
> <svg class="svg svg-icon" viewbox="0 0 20 20">
> <path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z"
> style="stroke: white; fill: white;">
> </path>
> </svg>
> <label>
> </label>
> </div>
> </div>
> </td>
> <td class="chooseMembersStep__member-area-name-col">
> <label class="chooseMembersStep__area-name" for="3572218_39b9bf20-6493-4bd8-b2c4-6f6a4ab5a69d">
> Hoops M-F / 7-8a /- 2 Half Courts (1 reservation per member family account)
> </label>
> </td>
> </tr>
> <tr class="chooseMembersStep__member-area">
> <td>
> </td>
> <td class="chooseMembersStep__member-area-checkbox-col">
> <div class="pretty p-svg p-curve">
> <input id="3572218_9a486991-672e-4a87-9130-05f379344968" type="checkbox"/>
> <div class="state p-success">
> <svg class="svg svg-icon" viewbox="0 0 20 20">
> <path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z"
> style="stroke: white; fill: white;">
> </path>
> </svg>
> <label>
> </label>
> </div>
> </div>
> </td>
> <td class="chooseMembersStep__member-area-name-col">
> <label class="chooseMembersStep__area-name" for="3572218_9a486991-672e-4a87-9130-05f379344968">
> Hoops M-S / 8a-8p /- 4 Half Courts (1 reservation per member family account)
> </label>
> </td>
> </tr>
> <tr class="chooseMembersStep__member-area">
> <td>
> </td>
> <td class="chooseMembersStep__member-area-checkbox-col">
> <div class="pretty p-svg p-curve">
> <input id="3572218_23d2d590-475d-44cd-84fd-c071bf299f89" type="checkbox"/>
> <div class="state p-success">
> <svg class="svg svg-icon" viewbox="0 0 20 20">
> <path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z"
> style="stroke: white; fill: white;">
> </path>
> </svg>
> <label>
> </label>
> </div>
> </div>
> </td>
> <td class="chooseMembersStep__member-area-name-col">
> <label class="chooseMembersStep__area-name" for="3572218_23d2d590-475d-44cd-84fd-c071bf299f89">
> Indoor Wellness Center
> </label>
> </td>
> </tr>
> <tr class="chooseMembersStep__member-area">
> <td>
> </td>
> <td class="chooseMembersStep__member-area-checkbox-col">
> <div class="pretty p-svg p-curve">
> <input id="3572218_b6470dcf-ab5d-44e5-85e2-4a50a1f7ffc7" type="checkbox"/>
> <div class="state p-success">
> <svg class="svg svg-icon" viewbox="0 0 20 20">
> <path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z"
> style="stroke: white; fill: white;">
> </path>
> </svg>
> <label>
> </label>
> </div>
> </div>
> </td>
> <td class="chooseMembersStep__member-area-name-col">
> <label class="chooseMembersStep__area-name" for="3572218_b6470dcf-ab5d-44e5-85e2-4a50a1f7ffc7">
> Lap Pool - Lane 1 (1 reservation allows 4 members from same family account)
> </label>
> </td>
> </tr>
> <tr class="chooseMembersStep__member-area">
> <td>
> </td>
> <td class="chooseMembersStep__member-area-checkbox-col">
> <div class="pretty p-svg p-curve">
> <input id="3572218_34b69cbf-c890-4090-912e-1a2e32c805a9" type="checkbox"/>
> <div class="state p-success">
> <svg class="svg svg-icon" viewbox="0 0 20 20">
> <path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z"
> style="stroke: white; fill: white;">
> </path>
> </svg>
> <label>
> </label>
> </div>
> </div>
> </td>
> <td class="chooseMembersStep__member-area-name-col">
> <label class="chooseMembersStep__area-name" for="3572218_34b69cbf-c890-4090-912e-1a2e32c805a9">
> Lap Pool - Lane 2 (1 reservation allows 4 members from same family account)
> </label>
> </td>
> </tr>
> <tr class="chooseMembersStep__member-area">
> <td>
> </td>
> <td class="chooseMembersStep__member-area-checkbox-col">
> <div class="pretty p-svg p-curve">
> <input id="3572218_7f453950-a5ba-424a-ac1e-a8c968519ab7" type="checkbox"/>
> <div class="state p-success">
> <svg class="svg svg-icon" viewbox="0 0 20 20">
> <path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z"
> style="stroke: white; fill: white;">
> </path>
> </svg>
> <label>
> </label>
> </div>
> </div>
> </td>
> <td class="chooseMembersStep__member-area-name-col">
> <label class="chooseMembersStep__area-name" for="3572218_7f453950-a5ba-424a-ac1e-a8c968519ab7">
> Lap Pool - Lane 3 (1 reservation allows 4 members from same family account)
> </label>
> </td>
> </tr>
> <tr class="chooseMembersStep__member-area">
> <td>
> </td>
> <td class="chooseMembersStep__member-area-checkbox-col">
> <div class="pretty p-svg p-curve">
> <input id="3572218_28fed658-ad4e-4721-8b90-d6c943f0fac9" type="checkbox"/>
> <div class="state p-success">
> <svg class="svg svg-icon" viewbox="0 0 20 20">
> <path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z"
> style="stroke: white; fill: white;">
> </path>
> </svg>
> <label>
> </label>
> </div>
> </div>
> </td>
> <td class="chooseMembersStep__member-area-name-col">
> <label class="chooseMembersStep__area-name" for="3572218_28fed658-ad4e-4721-8b90-d6c943f0fac9">
> Lap Pool - Lane 4 (1 reservation allows 4 members from same family account)
> </label>
> </td>
> </tr>
> <tr class="chooseMembersStep__member-area">
> <td>
> </td>
> <td class="chooseMembersStep__member-area-checkbox-col">
> <div class="pretty p-svg p-curve">
> <input id="3572218_c22ab33c-7850-4a52-a6e9-8737647ea54f" type="checkbox"/>
> <div class="state p-success">
> <svg class="svg svg-icon" viewbox="0 0 20 20">
> <path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z"
> style="stroke: white; fill: white;">
> </path>
> </svg>
> <label>
> </label>
> </div>
> </div>
> </td>
> <td class="chooseMembersStep__member-area-name-col">
> <label class="chooseMembersStep__area-name" for="3572218_c22ab33c-7850-4a52-a6e9-8737647ea54f">
> Lap Pool - Lane 5 (1 reservation allows 4 members from same family account)
> </label>
> </td>
> </tr>
> <tr class="chooseMembersStep__member-area">
> <td>
> </td>
> <td class="chooseMembersStep__member-area-checkbox-col">
> <div class="pretty p-svg p-curve">
> <input id="3572218_24177575-8769-405b-af6a-5e5afdb10c56" type="checkbox"/>
> <div class="state p-success">
> <svg class="svg svg-icon" viewbox="0 0 20 20">
> <path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z"
> style="stroke: white; fill: white;">
> </path>
> </svg>
> <label>
> </label>
> </div>
> </div>
> </td>
> <td class="chooseMembersStep__member-area-name-col">
> <label class="chooseMembersStep__area-name" for="3572218_24177575-8769-405b-af6a-5e5afdb10c56">
> Lap Pool - Lane 6 (1 reservation allows 4 members from same family account)
> </label>
> </td>
> </tr>
> <tr class="chooseMembersStep__member-area">
> <td>
> </td>
> <td class="chooseMembersStep__member-area-checkbox-col">
> <div class="pretty p-svg p-curve">
> <input id="3572218_0ee4cec1-2149-4af5-9c76-22abc6574d64" type="checkbox"/>
> <div class="state p-success">
> <svg class="svg svg-icon" viewbox="0 0 20 20">
> <path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z"
> style="stroke: white; fill: white;">
> </path>
> </svg>
> <label>
> </label>
> </div>
> </div>
> </td>
> <td class="chooseMembersStep__member-area-name-col">
> <label class="chooseMembersStep__area-name" for="3572218_0ee4cec1-2149-4af5-9c76-22abc6574d64">
> Showers (Reservation only necessary if you don't have a reservation in another area of the building)
> </label>
> </td>
> </tr>
> <tr class="chooseMembersStep__member-area">
> <td>
> </td>
> <td class="chooseMembersStep__member-area-checkbox-col">
> <div class="pretty p-svg p-curve">
> <input id="3572218_084dfd23-3ab5-4624-bcc8-bb7f8a25d30d" type="checkbox"/>
> <div class="state p-success">
> <svg class="svg svg-icon" viewbox="0 0 20 20">
> <path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z"
> style="stroke: white; fill: white;">
> </path>
> </svg>
> <label>
> </label>
> </div>
> </div>
> </td>
> <td class="chooseMembersStep__member-area-name-col">
> <label class="chooseMembersStep__area-name" for="3572218_084dfd23-3ab5-4624-bcc8-bb7f8a25d30d">
> Track
> </label>
> </td>
> </tr>
> <tr class="chooseMembersStep__member-spacer">
> <td colspan="3">
> </td>
> </tr>
> </tbody>
> </table>
> </div>
> <div class="ctas">
> <button class="btn" type="button">
> Back
> </button>
> <button class="btn btn-primary" type="button">
> Next
> </button>
> </div>
> </div> </div> <div style="clear: both;"> </div> </main>
我一直在使用这个 python 代码来点击这 6 个元素并点击下一个按钮:
wd.maximize_window()
actions = ActionChains(wd)
for chk in wd.find_elements_by_xpath("//td[.//label[contains(.,'Lap Pool - Lane')]]")[:4]:
actions.move_to_element(chk).click(chk).perform()
wd.fullscreen_window()
wd.find_element_by_xpath('//*[@id="schedule-visit-wizard-app"]/div/div[2]/button[2]').click()
我刚刚在点击六个游泳框时得到了帮助,但它似乎仍然没有转到下一页。如果那是因为实际上没有选择游泳框,或者它没有单击下一步,但我运行该 html 代码后的 html 代码是相同的。
表示页面没有改变。有什么想法吗?
另外,如果有人知道如何渲染 webdriver/webpage 的当前状态,那么我可以看到正在发生的事情,这对调试很有帮助。
【问题讨论】:
标签: python selenium xpath css-selectors webdriverwait