我正在尝试编写一个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()
答案 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
屏幕自动化工具点击指定的图像(例如按钮的屏幕截图)或屏幕上的指定坐标。