2017-08-22 12 views
0

Python-Seleniumを使用してニューヨークマラソン(参照:http://results.nyrr.org/event/M2016/finishers)からランナーの情報をダウンロードしようとしています。私は、性別や年齢層によって、この情報をフィルタリングしたいので、私は次のコードを書いた:情報をフィルタリングするためにPython-Seleniumを使用しているときにクリックが機能しない

browser = webdriver.Chrome() 
browser.get('http://results.nyrr.org/event/M2016/finishers') 
browser.maximize_window() 

gender_menu = browser.find_element_by_xpath("//div[@class='dropdown dropdown- 
main short-filter']") 
gender_menu.click() 
gender_menu.find_element_by_xpath("//ul[@role='menu']/li[3]").click() 

age_menu = browser.find_element_by_xpath("//div[@class='dropdown dropdown- 
main short-filter ages-filter']") 
age_menu.click() 
age_menu.find_element_by_xpath("//ul[@role='menu']/li[3]").click() 

問題は一部age_menu.find_element_by_xpath("//ul[@role='menu']/li[3]").click()が私にexepction「エレメントが表示されない」私が使用している場合/li[1]/li[2]、またはを与えることです/li[3]ですが、/li[4]以上のインデックスを使用すると表示されません。

性別を選択するときにも使用するので、.clickはこの例外がありますか?ジェンダーには3つのオプションがあり、第4グループ以降は年齢グループ別にしかフィルタリングできないことに注意してください。どんな助けもありがとう!実装以下

+0

の作品は何ですか? – sircapsalot

+0

@sircapsalotデータを読み込むために各ランナーを最初にクリックする必要があるので、美しいスープは私の知る限りではできません – Belisario

+0

ok :)私はあなたがテストしているアプリケーションを知らないので疑問に思っていました。実際にajaxを起動する必要がある場合は、yesを返します。セレンは間違いなく適切です – sircapsalot

答えて

1

わからない場合は、あなたが探しているが、あなたは、なぜ美しいスープを使用しないで、データのためにスクレーピングしている場合、それは私

age_menu = browser.find_element_by_xpath("//div[@class='dropdown dropdown- 
main short-filter ages-filter']") 
age_menu.click() 
ages = age_menu.find_elements_by_css_selector('ul[role="menu"]>li>a') 
for age in ages: 
if age.text == 'AGE: 20-24': 
    age.click() 
    break 
+0

それは動作します!私はなぜこれが私がやっていたこととは全く異なるのか分からない – Belisario

関連する問題