我正在使用這個網站:https ://www.offerte.smartpaws.de/
我為品種(Rasse)提供了這個下拉選單,與其他下拉選單不同,我沒有找到允許我遍歷每個元素的選項描述串列。
值根據前一個元素而變化(是的,上面沒有)
我希望遍歷這個 droptown 中的每個選項,但不知道如何。
到目前為止,我有這段代碼可以嘗試遍歷它:
#y is based on previous element being yes or no, since dropdown changes based on it
if y == 'yes':
#size is a list of a few examples inside the dropdown, Ideally I don't want to have a list hardcoded but to go through all the options available
for size in sizes:
#below I click on the dropdown to display the elements
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="select2-id_form-0-breed-container"]'))).click()
#below I try to click on the option containing the text in the list
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,
'//select[@id="select2-id_form-0-breed-container"]//option[text()='
size ']'))).click()
#below is the same step but for option "no" in the previous element, and same logic as the previous step
else:
for breed in breeds_dog:
WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="select2-id_form-0-breed-container"]'))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,
'//select[@id="select2-id_form-0-breed-container"]//option[text()='
breed ']'))).click()
目標是能夠在理想情況下回圈遍歷所有品種選項(目前只針對狗),而無需將串列存盤在代碼中,而是回圈遍歷選項。正如我們在網站上看到的,這個元素不存盤選項串列。
謝謝
uj5u.com熱心網友回復:
此代碼將起作用:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="select2-id_form-0-breed-container"]'))).click()
breeds = driver.find_elements(By.XPATH, "//span[@class='select2-results']//li")
print(len(breeds))
for each_breed in breeds:
print(each_breed.text)
輸出(此處僅粘貼部分輸出,因為下拉串列中有 534 個元素):
534
Rasse
Abessinier
Affenpinscher
....
Yorkshire Terrier
Zwergdackel
Zwergpinscher/Min Pin
Zwergpudel
Zwergschnauzer
Zwergspaniel
Process finished with exit code 0
注意:我沒有對每個下拉項執行任何點擊操作。我只是拿出每個專案的文本并列印到控制臺。
這些元素位于其他地方。我通過檢查下拉項發現:
DOM 快照
- - 更新 - - :
我嘗試了這種相當笨拙的解決方法來單擊下拉串列的每個元素(上述方法以某種方式讓我遇到了陳舊的元素錯誤):
下面的代碼在下拉串列中找到每個專案并單擊它。
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="select2-id_form-0-breed-container"]'))).click()
breedpath = "//span[@class='select2-results']//li"
breeds = driver.find_elements(By.XPATH, breedpath)
print(len(breeds))
for i in range(len(breeds)):
each_breed = driver.find_element(By.XPATH, '(' breedpath '[' str(i 1) ']' ')')
print(each_breed.text)
each_breed.click()
# ... your code here ...
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[@role='combobox']"))).click()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/444794.html
