Selenium click()无需等待页面加载Python

时间:2015-02-24 17:41:58

标签: python selenium selenium-webdriver

我正在尝试编写一个Python程序来帮助在网站上进行预订。我知道预订的具体时间。 我希望使用Selenium来实现这一目标。我的策略是打开10个单独的浏览器窗口,然后让它们以0.1秒的间隔点击“提交”,从可以进行预订的特定时间开始.02秒开始。 我遇到的问题是每个click()命令似乎等待页面加载,然后转到下一个click()命令。是否可以单击()然后继续执行下一个命令而无需等待页面加载?页面将加载,因为它们位于不同的窗口中,我计划在此之后手动与它们进行交互。这就是我所拥有的。我希望click()命令立即触发,但它们不会。

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

1 个答案:

答案 0 :(得分:2)

您可以尝试使用unstable load strategy(未经测试)加载Firefox:

  

有一个beta功能让firefox不等待整页   调用.get或.click后加载。这可能会导致立即找到   休息,所以请务必使用隐式或显式等待。这个   仅适用于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屏幕自动化工具点击指定的图像(例如按钮的屏幕截图)或屏幕上的指定坐标。