2016-10-07 12 views
0

「Next」ボタンをクリックして、HubSpot.com上のランディングページをループさせようとしているPythonでSeleniumを使用してオートメーションフレームワークを構築しています。PythonでSeleniumを使用してページを切り替える

次のボタンがクロームインスペクタに応じて、以下のHTMLにあります。

<a class="next" data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0"> 
    <span data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0.1">Next</span> 
    <span class="right" data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0.2"></span> 
</a> 

そして、私は次のPythonコードを使用してボタンをクリックしています:

time.sleep(3) 
wait(self.driver, """//a[@class="next" and not(@disabled)]""") 
      nextButton = self.driver.find_element(By.XPATH, """//a[@class="next" and not(@disabled)]""") 
      hov = ActionChains(self.driver).move_to_element(nextButton) 
      hov.click().perform() 

私の待ち時間( )関数は次のように定義されます。

def wait(dr, x): 
    element = WebDriverWait(dr, 5).until(
     EC.presence_of_element_located((By.XPATH, x)) 
    ) 
    return element 

これは最初のページで完全に正常に動作します。しかし何らかの理由で2ページ目になるとボタンをクリックすることができません。エラーはなく、3ページ目には何をすべきかが始まりますが、2ページ目になります。また、2ページ目の[次へ]ボタンをクリックする直前にスクリプトを停止すると、そのボタンがChromedriverで強調表示されていることがわかります。

次へ]ボタンはクロームインスペクタ::

<a class="next" data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0"> 
    <span data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0.1">Next</span> 
    <span class="right" data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0.2"></span> 
</a> 

任意の提案によると、2ページの以下のHTMLに位置していますか?私はアイデアがありません。

+0

1回目と2回目のクリックの間にスリープを追加すると、突然動作しますか? –

+0

私はこのコードを2回(1ページに1回)使用することをお勧めします。なぜ単純な 'click()'の代わりに 'ActionChains'を使うのですか? – Andersson

+0

@LeviNoecker:私はすでにクリックの間に眠っています。残念ながら、これは何も変わりません。 – mfvas

答えて

0

私は回避策を見つけることができました。次のボタンをクリックしようとする代わりに、関連するページボタンをクリックします。最初のソリューションが動作しない理由を私はまだ理解していないが、これはページネーションを通じてクリックするワーキングソリューションです

if self.driver.find_elements(By.XPATH, """//a[@class="next" and not(@disabled)]""") != 0: 
       xpathstring = """//div[@class="hs-pagination"]/ul/li/a[text()="%s"]""" % (j) 
       waitclick(self.driver, xpathstring) 
       nextButton = self.driver.find_element(By.XPATH, xpathstring) 
       hov = ActionChains(self.driver).move_to_element(nextButton) 
       hov.click().perform() 
       time.sleep(3) 
       j = j + 1 

:私はそもそもJ = 2を定義し、次のコードを使用します。

関連する問題