我正在自動化一個網站,它有多個具有相同標題、類等的搜索框。它通常在每個頁面上出現 2 或 3 次。有沒有辦法告訴 Selenium 只使用第 2 次或第 3 次出現?
我目前有這個:
driver.find_element(By.XPATH, './/*[@title = "Searchbox"]').click()
和
driver.find_element(By.XPATH, './/*[@title = "Searchbox"]').send_keys(i)
它當前單擊第一個搜索框并鍵入數字 i,但我希望 Selenium 對具有相同 html 的任何其他搜索框執行此操作。
謝謝!
uj5u.com熱心網友回復:
要使用 xpath 通過它的出現來獲取某個元素,只需將 xpath 包裝在(<your xpath>)[number]元素number出現編號的位置。
點擊第二個:
driver.find_element(By.XPATH, '(.//*[@title = "Searchbox"])[2]').click()
uj5u.com熱心網友回復:
理想情況下,您的定位器策略應該在DOM Tree中唯一標識每個WebElement。
由于您的定位器策略在每個頁面上標識 2 或 3 個元素,因此您需要構建一個更規范的定位器。但是下面的代碼行:
driver.find_element(By.XPATH, './/*[@title = "Searchbox"]')
將始終選擇第一個匹配元素。
要單擊第二個和第三個匹配元素,可以使用以下定位器策略:
點擊第二場比賽:
driver.find_element(By.XPATH, "(.//*[@title = "Searchbox"])[1]").click()點擊第三個:
driver.find_element(By.XPATH, "(.//*[@title = "Searchbox"])[2]").click()
uj5u.com熱心網友回復:
作為最后的手段,您可以使用 xpath 索引:
如果這.//*[@title = "Searchbox"]代表1/3 nodes或1/2 nodes
您可以簡單地將其更改為
(.//*[@title = "Searchbox"])[2]
并像這樣使用它:
driver.find_element(By.XPATH, "(.//*[@title = 'Searchbox'])[2]").send_keys(i)
代表第二個節點
或[3]表示第三個節點。
(.//*[@title = "Searchbox"])[3]
等等....
不建議這樣做,但可以作為最后的手段。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/420029.html
標籤:
上一篇:如何使用Selenium和Python在iframe中使用contenteditable="true"在輸入欄位中發送文本
