我正在尝试编写一个 Python 程序来帮助在网站上进行预订。我知道可以预订的具体时间。 我希望使用 Selenium 来完成这个任务。我的策略是打开 10 个单独的浏览器窗口,然后让它们在可以进行预订的具体时间之前 0.02 秒开始,以 0.1 秒的间隔单击“提交”。 我遇到的问题是每个 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()
最佳答案
您可以尝试使用 unstable
load strategy 加载 Firefox (未测试):
There is beta feature to make firefox not wait for the full page to load after calling .get or .click. This may cause immediate find's to break, so please be sure to use an implicit or explicit wait too. This is only available for Firefox and not other browsers.
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
屏幕自动化工具,用于单击指定图像(例如按钮的屏幕截图)或屏幕上的指定坐标。
关于python - Selenium click() 无需等待页面加载 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28702637/