2014-06-08 159 views
1

我想屏幕刮網站(下段)Python的硒屏幕抓取

網站獲取輸入,導航到第二頁,並需要更多的投入,最終顯示的表。我不能在這一步:

driver.find_element_by_xpath("//select[@id='agencies']/option[@value='13156']").click() 

我得到的錯誤是:

selenium.common.exceptions.NoSuchElementException: Message: 'Unable to locate element: 

,因爲我看到的元素(註釋掉顯示ID),這是奇怪的。請幫忙/指點嗎?

(我想請求/ RoboBrowser - 似乎無法得到這個職位的工作,但未能有作爲)

from selenium import webdriver 
from selenium import selenium 
from bs4 import BeautifulSoup 

driver = webdriver.Firefox() 
url = 'http://www.ucrdatatool.gov/Search/Crime/Local/OneYearofData.cfm' 
driver.get(url) 

driver.find_element_by_xpath("//select[@id='state']/option[@value='1']").click() 
#driver.find_element_by_xpath("//select[@id='groups']/option[@value='8']").click() 

driver.find_element_by_xpath("//input[@type='submit' and @value='Next']").click() 
driver.implicitly_wait(5) # seconds 

# Display id tags 
#elementsAll = driver.find_elements_by_xpath('//*[@id]') 
#for elements in elementsAll: 
# print("id: ", repr(elements)) 
# print("idName: ",elements.get_attribute("id")) 
# driver.implicitly_wait(5) # seconds 

driver.find_element_by_xpath("//select[@id='groups']/option[@value='2']").click() 
driver.find_element_by_xpath("//select[@id='year']/option[@value=1986]").click() 
driver.find_element_by_xpath("//select[@id='agencies']/option[@value='13156']").click() 

更新 - 硒的below作品。我打算選擇列表框中的所有選項並保存查詢結果......感謝指針Alecxe!

select = Select(driver.find_element_by_id('agencies')) 
for options in select.options: 
    select.select_by_visible_text(options.text) 

select = Select(driver.find_element_by_id('groups')) 
for options in select.options: 
    select.select_by_visible_text(options.text) 

driver.find_element_by_xpath("//select[@id='year']/option[@value=1985]").click() 

driver.find_element_by_xpath("//input[@type='submit' and @value='Get Table']").click() 
+0

您應使用名字,而不是數字。 – EL3PHANTEN

+0

謝謝Alecxe!現在起要BeautifulSoup讀表.... 如果有人更優雅的方式做以上(使用請求或RoboBrowser)知道,請不要評論。非常感謝所有讀者! – Arun

+0

@ user3720674你不需要'BeautifulSoup',我很確定'selenium'可以處理這種情況。如果您需要幫助,請考慮使用詳細信息創建單獨的SO問題。謝謝。 – alecxe

回答

1

沒有optionselectagencies ID 13156值。有從102522值,可以通過印刷看到他們:

[element.get_attribute('value') for element in driver.find_elements_by_xpath('//select[@id="agencies"]/option')] 

此外,而不是由value發現option S,通過文本使用Select並獲得選擇:

from selenium.webdriver.support.ui import Select 

select = Select(driver.find_element_by_id('agencies')) 
print select.options 
select.select_by_visible_text('Selma Police Dept') 
+0

*臉掌* ....非常感謝!我會更新我的評論。 – Arun