我對下面代碼片段中的串列項之一的元素選擇復選框有疑問。
我可以在下面的代碼中選擇第一個第二和第四個元素,但是我無法選擇第三個元素。
當我只給泰姬酒店、歐貝羅伊酒店和喜來登印度酒店時。這三個都通過 python selenium web scrapping 進行檢查。當我將溫莎酒店添加到串列時,它沒有選擇它腳本顯示如下錯誤。
selenium.common.exceptions.ElementNotInteractableException:訊息:元素無法滾動到視圖中
注意:無論何時選擇一個專案,它的類名都會更改為“list-item star ng-star-inserted active”
我正在使用 Windows 10 Pycharm IDE 運行它。
硒==3.7.0 密碼學=3.1.1 熊貓
Python腳本:
txt_button = browser.find_element_by_xpath('//*[text() = "' element_to_be selected '"]')
txt_button.click()
<!DOCTYPE html>
<html lang="en">
<body>
<fd-order-supplier-list _ngcontent-ydw-c199="">
<div class="block-list block-list-selectable block-list-sm">
<div class="the-list">
<fd-order-supplier-list-item class="list-item star ng-star-inserted active" _nghost-ydw-c198="">
<div _ngcontent-ydw-c198="" class="list-item-inner">
<div _ngcontent-ydw-c198="" class="item-logo placeholder"><!---->
<div _ngcontent-ydw-c198="" class="logo-placeholder-inner ng-star-inserted">H</div><!----></div>
<div _ngcontent-ydw-c198="" class="item-name" style="">Taj Hotels</div>
<div _ngcontent-ydw-c198="" class="item-btn"><a _ngcontent-ydw-c198=""
class="btn btn-outline-default btn-xs">Add</a></div>
<div _ngcontent-ydw-c198="" class="item-check ng-star-inserted">
<div _ngcontent-ydw-c198="" class="item-checkbox"><span _ngcontent-ydw-c198="" class="icon">check</span>
</div>
</div><!----><a _ngcontent-ydw-c198=""
class="btn btn-sm btn-icon btn-text item-info-link ng-star-inserted"><span
_ngcontent-ydw-c198="" class="icon">visibility</span></a><!---->
<div _ngcontent-ydw-c198="" class="item-upper-text">IN</div>
</div>
</fd-order-supplier-list-item>
<fd-order-supplier-list-item class="list-item star ng-star-inserted active" _nghost-ydw-c198="">
<div _ngcontent-ydw-c198="" class="list-item-inner">
<div _ngcontent-ydw-c198="" class="item-logo placeholder"><!---->
<div _ngcontent-ydw-c198="" class="logo-placeholder-inner ng-star-inserted">I</div><!----></div>
<div _ngcontent-ydw-c198="" class="item-name" style="">Oberoi Hotels</div>
<div _ngcontent-ydw-c198="" class="item-btn"><a _ngcontent-ydw-c198=""
class="btn btn-outline-default btn-xs">Add</a></div>
<div _ngcontent-ydw-c198="" class="item-check ng-star-inserted">
<div _ngcontent-ydw-c198="" class="item-checkbox"><span _ngcontent-ydw-c198="" class="icon">check</span>
</div>
</div><!----><a _ngcontent-ydw-c198=""
class="btn btn-sm btn-icon btn-text item-info-link ng-star-inserted"><span
_ngcontent-ydw-c198="" class="icon">visibility</span></a><!---->
<div _ngcontent-ydw-c198="" class="item-upper-text">IN</div>
</div>
</fd-order-supplier-list-item>
<fd-order-supplier-list-item class="list-item star ng-star-inserted" _nghost-ydw-c198="">
<div _ngcontent-ydw-c198="" class="list-item-inner">
<div _ngcontent-ydw-c198="" class="item-name">Windsor Hotels</div>
<div _ngcontent-ydw-c198="" class="item-btn"><a _ngcontent-ydw-c198=""
class="btn btn-outline-default btn-xs">Add</a></div>
<div _ngcontent-ydw-c198="" class="item-check ng-star-inserted">
<div _ngcontent-ydw-c198="" class="item-checkbox"><span _ngcontent-ydw-c198="" class="icon">check</span>
</div>
</div><!----><a _ngcontent-ydw-c198=""
class="btn btn-sm btn-icon btn-text item-info-link ng-star-inserted"><span
_ngcontent-ydw-c198="" class="icon">visibility</span></a><!---->
<div _ngcontent-ydw-c198="" class="item-upper-text">IN</div>
</div>
</fd-order-supplier-list-item>
<fd-order-supplier-list-item class="list-item star ng-star-inserted" _nghost-ydw-c198="">
<div _ngcontent-ydw-c198="" class="list-item-inner">
<div _ngcontent-ydw-c198="" class="item-name">Sheraton India</div>
<div _ngcontent-ydw-c198="" class="item-btn"><a _ngcontent-ydw-c198=""
class="btn btn-outline-default btn-xs">Add</a></div>
<div _ngcontent-ydw-c198="" class="item-check ng-star-inserted">
<div _ngcontent-ydw-c198="" class="item-checkbox"><span _ngcontent-ydw-c198="" class="icon">check</span>
</div>
</div><!----><a _ngcontent-ydw-c198=""
class="btn btn-sm btn-icon btn-text item-info-link ng-star-inserted"><span
_ngcontent-ydw-c198="" class="icon">visibility</span></a><!---->
<div _ngcontent-ydw-c198="" class="item-upper-text">IN</div>
</div>
</fd-order-supplier-list-item>
</div>
</fd-order-supplier-list>
</body>
</html>
uj5u.com熱心網友回復:
代替:
txt_button = browser.find_element_by_xpath('//*[text() = "' element_to_be selected '"]')
您可以更規范地添加tag_name和class屬性,如下所示:
txt_button = browser.find_element_by_xpath("//div[@class='item-name' and text()='" element_to_be selected "']")
恰恰:
txt_button = driver.find_element(By.XPATH, "//div[@class='item-name' and text()='" element_to_be selected "']")
注意:您必須添加以下匯入:
from selenium.webdriver.common.by import By
理想情況下,要呼叫您需要為element_to_be_clickable()誘導WebDriverWait的元素,您可以使用以下任一定位器策略:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='item-name' and text()='" element_to_be selected "']"))).click()
注意:您必須添加以下匯入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/443897.html
上一篇:跳過不在視口中的頁面內容中的鏈接在Firefox中的焦點
下一篇:攔截來自側邊欄面板的請求
