2015-02-24 169 views
2

我正在嘗試編寫一個Python程序來幫助在網站上預訂。我知道預訂的具體時間。 我希望使用硒來完成這一點。我的策略是打開10個獨立的瀏覽器窗口,然後讓他們在0.1秒的時間內點擊「提交」,開始0.02秒,然後才能進行預定。 我遇到的問題是每個click()命令似乎都在等待頁面加載,然後再移動到下一個click()命令。是否可以點擊(),然後繼續下一個命令而不等待頁面加載?頁面會加載,因爲它們位於不同的窗口中,並且我打算在此之後手動與它們進行交互。這是我的。我想要點擊()命令立即觸發,但他們不。Selenium點擊()而無需等待頁面加載Python

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.support.ui import Select 

browser1 = webdriver.Firefox() 
browser1.get('http://www.reservationsite.com') 

browser2 = webdriver.Firefox() 
browser2.get('http://www.reservationsite.com') 

browser3 = webdriver.Firefox() 
browser3.get('http://www.reservationsite.com') 

def firstclick(): 
    elem1 = browser1.find_element_by_id('btnbookdates').click() 
    return 

def secondclick(): 
    elem2 = browser2.find_element_by_id('btnbookdates').click() 
    return 

def thirdclick(): 
    elem3 = browser3.find_element_by_id('btnbookdates').click() 
    return 

firstclick() 
secondclick() 
thirdclick() 
+0

我猜你不能在頁面加載之前通過id找到一個元素。 – Noelkd 2015-02-24 17:46:20

+0

頁面在click()之前全部加載,等待下一頁加載(在我試圖避免的click()之後。 – 4bsween7 2015-02-24 19:28:00

+0

我在代碼中看不到任何第二次點擊?我可以看到三個第一次點擊 – Noelkd 2015-02-24 20:53:33

回答

2

你可以嘗試用unstable load strategy(未測試)加載的Firefox:

有測試功能,讓Firefox不等待完整頁面 負載打電話不用彷徨。點擊或之後。這可能會導致立即發現 中斷,因此請務必使用隱式或顯式等待。此 僅適用於Firefox,不適用於其他瀏覽器。

profile = webdriver.FirefoxProfile() 
profile.set_preference("webdriver.load.strategy", "unstable") 

driver = webdriver.Firefox(firefox_profile=profile) 

Explicit Wait結合起來,以找到ID的元素:

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "btnbookdates")) 
) 
element.click() 

作爲替代,有點「瘋狂」的選項是使用sikuli屏幕自動化工具點擊指定的圖像(例如按鈕的屏幕截圖)或屏幕上指定的座標。

+0

在我提交第一次點擊()之前頁面全部加載完畢,所以沒有發現元素的問題,我不得不等待後面的頁面加載首先點擊(),然後它會轉到下一個click()命令。我想要啓動所有click(),然後讓這些後續頁面同時加載。 – 4bsween7 2015-02-24 19:32:56