2016-07-12 13 views
0

python.orgのナビゲーションメニューですべての要素をクリックしようとしています。私のコードはエラーなく実行されますが、 "community"要素だけがクリックされます。毎回クリックした覚えておいてくださいPython Seleniumメニューのすべての要素をクリックする

all_elems = driver.find_elements_by_css_selector('nav.python-navigation ul.navigation li') 

:ここ

driver = webdriver.Chrome("/Users/drao/Documents/chromedriver") 
driver.get("http://www.python.org") 
driver.maximize_window() 

#finds all elements under mainnav (about, downloads, documentation...) 
all_elems = driver.find_elements_by_id('mainnav') 
for elem in all_elems: 
    if elem.is_displayed(): 
     elem.click() 

<nav id="mainnav" class="python-navigation main-navigation do-not-print" role="navigation"> 

答えて

0

1つの要素がID mainnavであるため、コードが技術的に正しく機能しています。 1つの要素をつかんでクリックして終了します。私はクリックがDOMの最初のクリック可能な要素に落ちると思います。

クリック可能なタブをすべて取得するには、別の方法を使用する必要があります。ここではCSSのパスを使用して1がある(これは未テストです):

driver = webdriver.Chrome("/Users/drao/Documents/chromedriver") 
driver.get("http://www.python.org") 
driver.maximize_window() 

#finds all elements under mainnav (about, downloads, documentation...) 
all_elems = driver.find_elements_by_css_selector('nav#mainnav > ul > li') 
for elem in all_elems: 
    if elem.is_displayed(): 
     elem.click() 

は私が^^^実際、click()リロードように、しかし、あなたが見つけただろうので、すべての要素をページ機能することはないと思います最初のクリック後に失効してしまいます。

あなたは代わりに(テストや作業)必要な場合にのみ、各要素を取得し、それをクリックしnth-of-type技術の利点を取ることができる:

from selenium import webdriver 

driver = webdriver.Chrome() 
driver.get("http://www.python.org") 
driver.maximize_window() 

try: 
    #finds all elements under mainnav (about, downloads, documentation...) 
    all_elems = driver.find_elements_by_css_selector('nav#mainnav > ul > li') 

    # all_elems is now only useful as a count of all the elems on the screen 
    for index, _ in enumerate(all_elems, 1): 
     css_path = "nav#mainnav > ul > li:nth-of-type({0})" 
     elem = driver.find_element_by_css_selector(css_path.format(index)) 
     if elem.is_displayed(): 
      elem.click() 
finally: 
    driver.close() 
0

は以下のセレクタを使用して、すべての要素をつかむしようと、WebページのHTMLです:ここに私のコードですこれらの要素の1つ、ページ全体がリロードされ、StaleElementExceptionsを実行する可能性があります。

関連する問題