2016-09-02 13 views
1

他の言語のdo whileループのPython論理式に相当するものを探しています。私は反復しているページの結果を持っています。結果の構造:少なくとも1回、条件が真であるときにループアクションを実行する方法

1, 2, 3, 4 , ... NEXT 

各要素にはリンクがあります。最後のページだけがNEXT要素を持たないので、私は反復時にチェックする必要がある条件としてNEXTを特定しました。

私が使用してそれを識別した:

next_link = driver.find_element_by_id('anch_25')

をだから私は、私はnext_linkが、その後click()機能を使用してnext_linkをクリックして存在する各ページ上で実行したい機能my_function()を持っています。要素が存在しない場合は、1ページの結果しかないか、結果の最後のページにあることを意味します。いずれにしても、どちらの場合でもmy_functionを実行する必要があります。

だから私はしている:残念ながら、これは最初のページのみのために働いている

def my_function(): 
    print "Another result page" 

###This is where I am trying to loop through the results pages 

next_link = driver.find_element_by_id('anch_25') 

if next_link: 
    my_function() 
    next_link.click() 
else: 
    my_function() 

や他のページを反復処理しません。私もこれを試してみました

while next_link: 
    my_function() 
    next_link.click() 
my_function() 

どちらか動作するようには思えません。助言がありますか?

+0

ループの中で 'next_link'を更新することはないので、ループを開始したときと同じ値を常に持ち、' ​​while'ループは最初とは異なる何もしませんまたはループを連続して行う)。 – kindall

答えて

1

の後に次のリンクを確認してください。次にbreakを使用してnext_linkwhileの条件として使用せずにループを抜けてください。

while True: 
    my_function() 
    next_link = driver.find_element_by_id('anch_25') 
    if not next_link: 
     break 
    next_link.click() 
+0

@MoinuddinQuadriとOP、 'next_link'はブール値ではないので、 '!next_link'は'!next_link: 'の周りにSyntaxErrorを与えます。' type(next_link) 'を実行すると、webelementオブジェクトを返す' class 'selenium.webdriver .remote.webelement.WebElement '> 'もしそれがオブジェクトの型なら、'!next_link'は何を返しますか?どのように私はこれを洗練することができますか? –

+0

@TendekaiMuchenje申し訳ありませんが、間違った言葉で考えてみると、 'not next_link'にする必要があります。 'not'はその引数をブール値にする必要はなく、どんな値でも動作し、真実性をチェックします。 – Barmar

+0

それは私だけですか、このコードに問題がありますか?私にとっては、要素が存在しない最後のページに到達すると、エラーをスローし、その要素が存在しないと言ってくれます。休憩後、 'next_link.click()'を実行するべきでしょうか?または、私たちは 'my_function()'をしていなければなりません。要素が存在しない場合でも、my_function()を少なくとも1回は実行したいからです。 –

1

あなたはTrue/Falseにそれを変更することがあり、デフォルトでTrueに設定し、あなたの条件に基づいている変数でwhileループを使用することができます。例:

is_continue = True 

while is_continue: 
    ... # Your Logic 

    if my_condition: 
     is_continue = True 
    else: 
     is_continue = False 

PS:私はあなたにサンプルの例を与えて、実装するためにあなたに残ります。だから、あなたは自分の知っているとおりに実装して、どのように動作するのかを知ることができます。

関連する問題