2016-10-07 108 views
0

我正在Python中使用Selenium構建自動化框架,我試圖通過點擊「Next」按鈕來循環HubSpot.com上的着陸頁。點擊與Python中的Selenium分頁

下一個按鈕,根據Chrome檢查位於以下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 

這在第一頁上工作得很好。但由於某些原因,當我到達第二頁時,無法點擊按鈕。沒有錯誤,它只是開始做它應該在第三頁 - 但在第二頁。另外,如果我在第二頁上的Next按鈕之前停止腳本,我可以看到該按鈕在Chromedriver中突出顯示。

下一個按鈕,根據Chrome檢查::

<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> 

任何建議位於以下HTML第2頁?我沒有想法。

+0

如果您在第一次和第二次點擊之間添加睡眠,突然開始工作嗎? –

+0

我想你使用這段代碼兩次(每頁一次),對吧?:)爲什麼你使用'ActionChains'而不是簡單的'click()'? – Andersson

+0

@LeviNoecker:我已經有點擊之間的睡眠。不幸的是這並沒有改變任何東西 – mfvas

回答

0

我已經設法找到解決方法。而不是嘗試點擊下一個按鈕,我點擊相關的頁面按鈕。我定義J = 2開始,然後使用下面的代碼:

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 

我還是不明白,爲什麼第一個解決方案不起作用,但是這是一個可行的解決方案,以通過點擊分頁。