我設計了一個Python腳本,它可以刮開一個網站并填入一些關于用戶的細節。這很容易,因為該網站為我需要的每個元素提供了一個特定的ID。現在,他們部署了一個更新,改變了界面,所有文本框都有動態 ID(每個文本框的 ID 都不同,并且在重繪 頁面時發生變化)。
我試著搜索CSS選擇器,但不起作用。完整的XPATH是沒有用的,因為如果他們改變了divs或其他的東西,就沒有用了。我也無法通過文本找到他們... 這是他們的頁面和HTML代碼
我需要填寫名字/姓氏/電子郵件,但正如你所看到的,他們有相同的型別,和相同的CLASS,而且他們的ID是隨機的,都是以輸入開始的。
我設法找到了第一個,輸入了一些文字,然后按X標簽來回圈瀏覽它們。
browser.find_element_by_class_name('input') .send_keys('MICHAEL')
actions.send_keys(Keys.TAB)
actions.perform()
actions.send_keys('FULKE')
actions.perform()
有什么方法可以讓我直接指向特定的文本欄位嗎?我不能只是用TAB來回圈瀏覽它們(也許它們會改變它們的位置/順序)......
如果有任何幫助,我們將不勝感激
。uj5u.com熱心網友回復:
。< div class="form-field__label" data-v-78510568="> 名字<! ----></div>< div class="form-field__control" data-v-78510568="> < input id="input_vlcbo61z5" type="text" class="input" data-v-728ea34e="" data-v-5890f98b="> </div>/span><! ----></div></div>< div class="grid-item grid-item-xl-6" data-v-963e69fe=" data-v-5890f98b="> < div class="form-field"/span> data- v-78510568="" data-v-5890f98b="> < div class="form-field__label" data-v-78510568="> 網站<! ----></div>< div class="form-field__control" data-v-78510568="> < input id="input_umpb7xvn9" type="text" class="input" placeholder="www. 網站。 com" data-v-728ea34e=" data-v-5890f98b=">。 </div>/span><! ----></div></div>< div class="grid-item grid-item-xl-6" data-v-963e69fe=" data-v-5890f98b="> < div class="form-field"/span> data- v-78510568="" data-v-5890f98b="> < div class="form-field__label" data-v-78510568="> 姓氏<! ----></div>< div class="form-field__control" data-v-78510568="> < input id="input_g9tlbt7dt" type="text" class="input" data-v-728ea34e="" data-v-5890f98b="> </div>/span><! ----></div></div>< div class="grid-item grid-item-xl-6" data-v-963e69fe=" data-v-5890f98b="> < div class="form-field"/span> data- v-78510568="" data-v-5890f98b="> < div class="form-field__label" data-v-78510568="> 電話<! ----></div>< div class="form-field__control" data-v-78510568="> < input id="input_sfurpm31l" type="text" class="input" data-v-728ea34e="" data-v-5890f98b="> </div>/span><! ----></div></div>< div class="grid-item grid-item-xl-6" data-v-963e69fe=" data-v-5890f98b="> < div class="form-field"/span> data- v-78510568="" data-v-5890f98b="> < div class="form-field__label" data-v-78510568="> 電子郵件<! ----></div>< div class="form-field__control" data-v-78510568="> < input id="input_75ko5w3cw"/span> type="text"/span> class="input" data-v-728ea34e="" data-v-5890f98b="> </div>/span><! ----></div></div>< div class="grid-item grid-item-xl-6" data-v-963e69fe=" data-v-5890f98b="> < div class="form-field"/span> data- v-78510568="" data-v-5890f98b="> < div class="form-field__label" data-v-78510568=">
傳真<! ----></div>< div class="form-field__control" data-v-78510568="> < input id="input_noz2c1g4a" type="text" class="input" data-v-728ea34e="" data-v-5890f98b="> </div>/span><! ----></div></div>< div class="grid-item grid-item-xl-6" data-v-963e69fe=" data-v-5890f98b="> < div class="form-field"/span> data- v-78510568="" data-v-5890f98b="> < div class="form-field__label" data-v-78510568="> 職位名稱<! ----></div>< div class="form-field__control" data-v-78510568="> < input id="input_w7p0iec5u" type="text" class="input" data-v-728ea34e="" data-v-5890f98b="> </div>/span><! ----></div>< /div></div> < h2 class="text text_h2 user__add-subtitle" data-v-73655104=" data-v-5890f98b="> 群組</h2>< div class="grid-container" data-v-963e69fe=" data-v-5890f98b="> < div class="grid-item grid-item-xl-6" data-v-963e69fe=" data-v-5890f98b="> < div class="form-field"/span> data- v-78510568="" data-v-5890f98b="> <! ---->< div class="form-field__control" data-v-78510568="> < div class="input-tags"/span> data- v-2af32715="" data-v-5890f98b="> < div class="input-tags__field" data-v-2af32715="> < input id="input-tags_folh9wox7" 型別="text" placeholder="input-tags__control" data-v-2af32715="> </div></div> </div><! ----></div>
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
我發現了一個方法:使用browser.find_elements_by_class_name,然后使用該串列來抓取[0]、[2]、[4](這是FirstName/LastName/Email)...但又一次,這很瘋狂嗎!
uj5u.com熱心網友回復:
有很多方法可以做到這一點。 最好的方法是.....,不與動態ID合作。 這是我們在自動化UI測驗案例時經常推動的一個要求。
然而,可能有一些是動態的。在這些情況下,最好是擁有穩定的定位器,不需要什么維護。
我們如何做到這一點呢?
Patttern-matching specific attributes:
//div[contains(@text,'First Name'/span>)]/. /div[contains(@class,'control')]/input。
這就選擇了包含匹配文本的div,上升了一個元素(為匹配每個特定元素的文本欄位所必需,假設它們遵循類似的結構),然后匹配控制元件內的輸入。
按頁面中的位置對所有元素進行分組和回圈
你可以抓取所有的輸入,并通過它們進行回圈:)
(//input)[0] #將選擇第一個索引(First Name),[1] 第二個,等等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327069.html
標籤:


