簡體   English   中英

Python-硒-在下拉菜單中循環-選項不可見

[英]Python - Selenium - Cycling through drop-down menu - Option not visible

內容:我正在嘗試從此網頁中檢索有關2015年哥倫比亞市政選舉數據的信息: https ://elecciones.registraduria.gov.co: 81/ esc_elec_2015/99AL/ DAL01004ZZZZZZZZZZZZ_L1.htm

首先,我已經使用BeautifulSoup(15.152)成功地刪除了Abejorral市的注冊選民(“ personas habilitadas”)的人數。 下一步是對所有市政當局(“市政”)執行相同的操作。

為了做到這一點,我試圖繞過Python 3.5中的Selenium,以循環瀏覽“ Municipio”下拉菜單,以便我可以一個一個地選擇每個municipio,並檢索“ personas habilitadas”的相應編號。 我目前面臨的問題是我無法告訴Selenium在下拉菜單中選擇其他選項/市鎮,例如“ Abriaqui”。 相應的HTML代碼在此處(有意縮短的選項列表):

 <select id="combo3" class="chosen-select" style="display: none;"> <option value="../99AL/DAL01ZZZZZZZZZZZZZZZ_L1.htm">Todos</option> <option selected="selected" value="../99AL/DAL01004ZZZZZZZZZZZZ_L1.htm">ABEJORRAL</option> <option value="../99AL/DAL01007ZZZZZZZZZZZZ_L1.htm">ABRIAQUI</option> <option value="../99AL/DAL01010ZZZZZZZZZZZZ_L1.htm">ALEJANDRIA</option> <option value="../99AL/DAL01013ZZZZZZZZZZZZ_L1.htm">AMAGA</option> <option value="../99AL/DAL01300ZZZZZZZZZZZZ_L1.htm">YONDO-CASABE</option> <option value="../99AL/DAL01301ZZZZZZZZZZZZ_L1.htm">ZARAGOZA</option> </select> 

遵循諸如此類的先前問題( Selenium-Python-下拉菜單選項value ),我首先嘗試了使用Selenium進行下拉菜單的基本方法,即以以下方式使用其Select方法:

#Preamble to code
#Importing packages
import selenium
import time
from selenium import webdriver

url = https://elecciones.registraduria.gov.co:81/esc_elec_2015/99AL/DAL01004ZZZZZZZZZZZZ_L1.htm #Setting URL

driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get(url)

time.sleep(20)


from selenium.webdriver.support.ui import Select

select = Select(driver.find_element_by_id('combo3')) #Selecting the drop-down menu by ID
select.select_by_value("../99AL/DAL01007ZZZZZZZZZZZZ_L1.htm") # Trying to select the option in drop-down menu by value. Error arises.

按值選擇時,出現ElementNotVisibleException錯誤。 因此,我嘗試進行一些故障排除,以解決SO上提供的其他解決方案(請參閱此處: 使用selenium python從下拉選項中選擇一個值 ),例如通過XPath查找元素,然后單擊它。 這是我嘗試的代碼:

driver.find_element_by_xpath("//select[@id='combo3']/option[@value='../99AL/DAL01007ZZZZZZZZZZZZ_L1.htm']").click()

在這里再次出現ElementNotVisibleException 因此,接下來,我嘗試這里建議的內容( ElementNotVisibleException:消息:元素不可見-Python3 Selenium ),即使用以下代碼實現一些等待時間,並等待直到與下拉菜單相對應的元素可單擊為止:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='combo3']")))
element.click()

在這里,我得到一個TimeoutException 以前,我使用Chrome的開發人員工具控制台檢查是否有兩個或多個與定位器匹配的元素,並且只有一個(長度:1),所以我認為可能是其他原因導致了超時,但我無法找到原因它可能是。

通過實現EC.visibility_of_element_located等其他方法嘗試此處建議的某些解決方法( Python硒下拉菜單單擊 )時,我也遇到TimeoutException。 這是引發TimeoutException的代碼:

element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//select[@id='combo3']")))
select = Select(element)

如您所見,我已經嘗試了各種技術來嘗試從Municipio下拉菜單中選擇其他選項,但仍然無法弄清楚。 如有任何幫助或建議告訴我我所缺少或做錯的事,將不勝感激。 提前致謝!

ID為“ combo3”的select元素的樣式為“ display:none;”。 這使它對硒不可見。 您可以使用div ID'combo3_chosen'驅動元素,然后輸入所需的結果。

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

select_div = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//div[@id='combo3_chosen']")))
select_div.click()
input = WebDriverWait(driver, 10).until(EC.visibility_of_any_elements_located((By.XPATH, "//input")))
input[0].send_keys("Todos")
input[0].send_keys(Keys.RETURN)

在我的示例中,我單擊select_div,這會打開一個帶下拉菜單的輸入。 然后,我輸入“ Todos”並按回車鍵以加載“ Todos”部分。

我使用“ visibility_of_any_elements_located”作為輸入,因為頁面上有多個輸入被隱藏(其他選擇)。 如果我使用“ visibility_of_element_located”,Selenium將嘗試返回不可見的第一個輸入。 'visibility_of_any_elements_located'將返回任何可見的輸入。

或者,您可以打開select_div並找到所需的結果,然后單擊該元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM