0

我正在使用 Selenium 获取 div 值,但闲置代码不是在等待页面,而是在等待 URL。我用过time.sleep,非常原始,完全不灵活。我想明确地改变它,但我在 Python 方面没有太多经验,我对此有疑问。

网站名称已更改以防万一:

def repeat():
    import wx
    while True:
        botloc = driver.find_element_by_id('botloc').text
        print botloc
        botX,botY = map(int,botloc.split(','))
        print botX
        print botY
        wx.Yield()
def checker():
    if driver.current_url == 'logged.example.com':
        time.sleep(5)
        repeat()
    else:
        checker()
checker()

如何time.sleep在页面加载后用灵活的东西替换以等待尽可能短的时间?如何在我的代码中正确使用显式?

我知道使用网站上的元素是可能的,但我写不出任何明智的东西,我只需要一个例子。

是否有可能使用element_by_id('botloc')等待直到它可见然后开始 repeat() ?

4

1 回答 1

0

如何在页面加载后用灵活的东西替换 time.sleep 以等待最短的时间?

我想你get(url)用来加载页面。通常你不需要做任何事情,WebDriver 会自动等待页面被加载。所以你可以删除time.sleep(). 但是,使用getfirefox 驱动程序加载页面时报告了一些问题,因为您将不得不等待一些目标元素,这些元素应该在加载的页面中,如下所述。

如何在我的代码中正确使用显式?

你检查过 Selenium webdriver 文档吗?botloc您可以如下明确等待元素

//assuming you have a valid webdriver reference
//Ex: DEFAULT_WAIT = 10 means
//waits up to 10 seconds before throwing a TimeoutException or if it finds the element will return it in 0 - 10 seconds.

element = WebDriverWait(webdriver, DEFAULT_WAIT).until(EC.presence_of_element_located((By.ID, "botloc")))

有关更多信息,请参阅此页面

于 2013-05-18T19:00:23.927 回答