簡體   English   中英

每次頁面加載時 ID 更改時,如何單擊 Python Selenium 的復選框?

[英]How to click check box with Python Selenium when ID changes each time the page loads?

我正在嘗試單擊 div 中的復選框。 但是,每次加載頁面時 ID 都會更改,因此我無法使用該 ID,但我需要根據 div 中的其他數據單擊復選框。 我嘗試選中的復選框 select 是下面示例中的最后一個復選框,並且關聯了此帳戶代碼 531377222。

我也許可以使用 XPATH,但我不確定如何將我需要的帳戶代碼與相應的復選框相關聯。

這是復選框的 html。

 <div class="slick-pane slick-pane-header slick-pane-right" tabindex="0" style="display: none;">
                           <div class="ui-widget-content slick-row odd" style="top:150px">
                                    <div class="slick-cell l0 r0 slick-cell-checkboxsel"><input id="selector9588897" type="checkbox"><label for="selector9588897"></label></div>
                                    <div class="slick-cell l1 r1">173622856</div>
                                    <div class="slick-cell l2 r2">SOME HOSPITAL</div>
                                    <div class="slick-cell l3 r3">1234 Main St., Anywhere, CA                                                                           US</div>
                                    <div class="slick-cell l4 r4 reallyHidden">Both</div>
                                 </div>
                                 <div class="ui-widget-content slick-row even" style="top:200px">
                                    <div class="slick-cell l0 r0 slick-cell-checkboxsel"><input id="selector1002169" type="checkbox"><label for="selector1002169"></label></div>
                                    <div class="slick-cell l1 r1">184054655</div>
                                    <div class="slick-cell l2 r2">SOME HOSPITAL/ACCTS</div>
                                    <div class="slick-cell l3 r3">5555 ELM AVE, ANYWHERE, NJ 64545-1621                                                                           US</div>
                                    <div class="slick-cell l4 r4 reallyHidden">Both</div>
                                 </div>
                                 <div class="ui-widget-content slick-row odd" style="top:250px">
                                    <div class="slick-cell l0 r0 slick-cell-checkboxsel"><input id="selector751814" type="checkbox"><label for="selector751814"></label></div>
                                    <div class="slick-cell l1 r1">265215254</div>
                                    <div class="slick-cell l2 r2">SOME ENTITIY</div>
                                    <div class="slick-cell l3 r3">321 MAIN ST STE 310, ANYWHERE, CA 56456-1757                                                                           US</div>
                                    <div class="slick-cell l4 r4 reallyHidden">Both</div>
                                 </div>
                                 <div class="ui-widget-content slick-row even" style="top:300px">
                                    <div class="slick-cell l0 r0 slick-cell-checkboxsel"><input id="selector374087" type="checkbox"><label for="selector374087"></label></div>
                                    <div class="slick-cell l1 r1">267106207</div>
                                    <div class="slick-cell l2 r2">SOME ENTITY</div>
                                    <div class="slick-cell l3 r3">321 MAIN ST STE 310, ANYWHERE, CA 56456-1757                                                                           US</div>
                                    <div class="slick-cell l4 r4 reallyHidden">Both</div>
                                 </div>
                                 <div class="ui-widget-content slick-row odd" style="top:350px">
                                    <div class="slick-cell l0 r0 slick-cell-checkboxsel"><input id="selector3010516" type="checkbox"><label for="selector3010516"></label></div>
                                    <div class="slick-cell l1 r1">305663190</div>
                                    <div class="slick-cell l2 r2">ANOTHER ENTITY</div>
                                    <div class="slick-cell l3 r3">147 E BROADWAY, SOMETOWN, MN 67777-5844                                                                              US</div>
                                    <div class="slick-cell l4 r4 reallyHidden">Both</div>
                                 </div>
                                 <div class="ui-widget-content slick-row odd" style="top:450px">
                                    <div class="slick-cell l0 r0 slick-cell-checkboxsel"><input id="selector7278518" type="checkbox"><label for="selector7278518"></label></div>
                                    <div class="slick-cell l1 r1">667508371</div>
                                    <div class="slick-cell l2 r2">AAA OUTBOUND</div>
                                    <div class="slick-cell l3 r3">134 MAIN STREET STE 310, SOME CITY, CA 98745-1757                                                                           US</div>
                                    <div class="slick-cell l4 r4 reallyHidden">Both</div>
                                 </div>
                                 <div class="ui-widget-content slick-row even" style="top:500px">
                                    <div class="slick-cell l0 r0 slick-cell-checkboxsel"><input id="selector3764758" type="checkbox"><label for="selector3764758"></label></div>
                                    <div class="slick-cell l1 r1">687324935</div>
                                    <div class="slick-cell l2 r2">BBB OUTBOUND</div>
                                    <div class="slick-cell l3 r3">5645 POPPYSEED DRIVE STE 310, SOME CITY, CA 65456-1757                                                                           US</div>        
                                   <div class="slick-cell l4 r4 reallyHidden">Both</div>
                                 </div>                       
                                    <div class="slick-cell l0 r0 slick-cell-checkboxsel"><input id="selector5842832" type="checkbox" checked="checked"><label for="selector5842832"></label></div>
                                    <div class="slick-cell l1 r1">531377222</div>
                                    <div class="slick-cell l2 r2">N/A</div>
                                    <div class="slick-cell l3 r3">N/A</div>
                                    <div class="slick-cell l4 r4 reallyHidden">Both</div>
                                 </div>
                              </div>
                           </div>
                        </div>

按照這些思路應該可以解決您的問題(如果我理解您的問題):

wait = WebDriverWait(browser, 20)

browser.get(url)
##[...] your code
account_id = '1234567'
corresponding_checkbox = wait.until(EC.element_to_be_clickable((By.XPATH, f'div[text()= "{account_id}"]/preceding-sibling::div/input)))'

使用以下xpath根據關聯代碼識別復選框元素。

//div[text()='531377222']/preceding-sibling::div[1]//label

或者

//div[text()='531377222']/preceding-sibling::div[1]//input

如果你想使這個動態使用 python format() function 並將關聯代碼作為參數傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM