我在 popup-bubble 中選擇一個選項時遇到問題(抱歉,我不太確定如何確定它是哪種型別的彈出視窗)我并不介意我選擇哪個選項,我只需要單擊其中一個。這是它在代碼中的樣子:
<div data-v-d4e6e290="" class="f_input-optionsWrapper js_optionsWrapper" style=""><div data-v-d4e6e290="" class="f_input-options"><div data-v-d4e6e290="" class="f_input-header js_header">Oslovení</div> <div data-v-d4e6e290="" class="f_input-options-content"><div class="f_customScroll" data-v-d4e6e290="" style="max-height: 883px;"><div data-v-68c7351e="" class="f_input-option"><div data-v-68c7351e="" data-testid="Pan" class="f_input-option-text xh-highlight">
Pan
</div></div><div data-v-68c7351e="" class="f_input-option"><div data-v-68c7351e="" data-testid="Paní" class="f_input-option-text">
Paní
</div></div></div> <div data-v-d4e6e290="" class="f_input-footer js_footer"><!----> <span data-v-d4e6e290="" class="f_button f_button--common f_button_set--small">Potvrdit</span></div></div></div></div>

我嘗試以多種方式定位元素,第一個問題是它總是檢測到兩個結果。彈出視窗是選擇旅行者的性別,我有兩個旅行者,所以我猜它也檢測到第二個旅行者的第二個彈出視窗。
我試圖找到:
volbaOsloveni = driver.find_elements_by_xpath("//*[@class='f_input-optionsWrapper js_optionsWrapper'] //*[@class='f_input-option-text']")
volbaOsloveni2 = driver.find_elements_by_xpath("//*[@data-testid='Pan']")
volbaOsloveni3 = driver.find_element_by_xpath("//*[@class='f_customScroll'] //*[@data-testid='Pan']")
所有這些都讓我得到了兩個結果,我想這應該可行。每當我嘗試單擊元素 selenium 時,要么說它沒有找到該元素,要么只是傳遞它,因為它已經單擊了該元素并且腳本繼續執行。
點擊嘗試:
volbaOsloveni[0].click()
driver.execute_script("arguments[0].click();", volbaOsloveni3)
volbaOsloveni2[1].click()
我嘗試了 find_elementS 方法,所以我得到了更多的結果,這就是為什么我試圖用 [0] 等點擊第一個元素。execute_script 或 click() 都沒有完成這項作業,我現在有點絕望了。
任何人都可以幫我嗎?將不勝感激!提前致謝
uj5u.com熱心網友回復:
單擊Pan或Paní
請檢查dev tools(谷歌瀏覽器)我們是否有唯一的條目HTML DOM。
您應該檢查的 xpath :
//div[@data-testid='Paní']
檢查步驟:
Press F12 in Chrome- >去element節- >做一個CTRL F- >再貼上xpath看看,如果你需要的element是越來越強調與1/1匹配的節點。
如果我們有 1/1 匹配節點,請使用下面提到的代碼中的任何一個進行點擊:
代碼試用1:
time.sleep(5)
driver.find_element_by_xpath("//div[@data-testid='Paní']").click()
代碼試用2:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@data-testid='Paní']"))).click()
代碼試用3:
time.sleep(5)
button = driver.find_element_by_xpath("//div[@data-testid='Paní']")
driver.execute_script("arguments[0].click();", button)
代碼試用4:
time.sleep(5)
button = driver.find_element_by_xpath("//div[@data-testid='Paní']")
ActionChains(driver).move_to_element(button).click().perform()
進口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
此外,如果您仍然看到 XPath 的 2 個元素
//div[@data-testid='Paní']
請使用 XPath 索引:
(//div[@data-testid='Paní'])[2]
根據索引過濾掉節點。
uj5u.com熱心網友回復:
要單擊帶有文本的元素,Pan您可以使用以下任一定位器策略:
使用
css_selector:driver.find_element(By.CSS_SELECTOR, "div.f_input-options div.f_input-options-content div[data-testid='Pan']").click()使用
xpath:driver.find_element(By.XPATH, "//div[@class='f_input-options']//div[@class='f_input-options-content']//div[@data-testid='Pan']").click()
所需的元素是一個動態的元素,因此理想情況下,點擊的元素,你需要引起WebDriverWait的element_to_be_clickable(),你可以使用以下的定位策略:
使用
CSS_SELECTOR:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.f_input-options div.f_input-options-content div[data-testid='Pan']"))).click()使用
XPATH:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='f_input-options']//div[@class='f_input-options-content']//div[@data-testid='Pan']"))).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/net/351362.html
上一篇:如何使用seleniumWebDriverpython遍歷每個下拉串列
下一篇:Selenium無頭模式使用AjaxElementLocatorFactory的少數測驗因NoSuchElementException而失敗
