Selenium显式等待python

时间:2018-01-09 09:46:40

标签: python selenium web-scraping

我认为这个问题是独一无二的,因为这是专门针对Python而且与其他线程中提到的Java问题无关。

我正在浏览Selenium's documentation regarding explicit waits,但我无法创建代码来说明每个显式的等待用例。

以下示例有效(即返回True)

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Firefox()
driver.get('https://www.google.com')

#match title tag
def title_is(driver, title, timeout=3):
    try:
        w = WebDriverWait(driver, timeout)
        w.until(EC.title_is(title))
        return True
    except:
        return False

print title_is(driver, 'Google',timeout=3)

但是下面的示例不起作用(我使用不同的显式等待条件)

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Firefox()
driver.get('https://www.google.com')

#try to grab <div id="als">
def presence_of_element(driver, timeout=3):
    try:
        w = WebDriverWait(driver, timeout)
        w.until(EC.presence_of_element_located(By.ID('als')))
        return True
    except:
        return False

我已尝试过多种形式的语法,但除了title_is

外,我无法使任何明确的等待条件工作

我非常感谢您的反馈,因为我显然在这里遗漏了一些东西。

由于

2 个答案:

答案 0 :(得分:0)

presence_of_element_located的语法不正确。它需要一个定位器类型By.ID和值als

的元组

w.until(EC.presence_of_element_located((By.ID, 'als')))

请参阅: http://selenium-python.readthedocs.io/waits.html#explicit-waits

答案 1 :(得分:0)

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

driver = webdriver.Firefox()
driver.get('https://www.google.com')

def error_catching():
    traceback.print_stack()
        print '--------------'
        traceback.print_exc()
        return False


#try to grab <div id="gbw">
def presence_of_element(driver, timeout=5):
    try:
        w = WebDriverWait(driver, timeout)
        w.until(EC.presence_of_element_located((By.ID,'gbw')))
        return True
    except:
        error_catching()