selenium元素等待

元素等待:js代码执行渲染期间,导致数据/标签加载缓慢,如果元素没有加载完成,直接通过find_element去进行定位,会出现元素不存在的异常。


3种方法:

1. time.sleep(10) 强制性等待,不管元素在设置时间范围内是否加载出来,都必须要等待固定的时间。
2. WebDriverWait(10) 智能等待的方法,最多等待10秒,10秒之后仍然没有元素,会抛出异常。10秒内找到这个元素,直接向下执行代码。这个方法一般适用于单个元素的等待;

3. implicitly_wait(10) 最大等待时间10秒,针对的是整个页面,给当前页面设置最大等待时间;


driver = webdriver.Firefox()
driver.get('https://s.taobao.com/search?initiative_id=tbindexz_20170306&ie=utf8&spm=a21bo.2017.201856-taobao-item.2&sourceId=tb.index&search_type=item&ssid=s5-e&commend=all&imgfile=&q=%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91&suggest=history_1&_input_charset=utf-8&wq=&suggest_query=&source=suggest')


driver.implicitly_wait(20)


# 在定位价格时,添加元素等待
# price = WebDriverWait(driver, 20).until(lambda driver:driver.find_element_by_css_selector('.price > strong'))
# print(price.text)

# 方式二:
price = driver.find_element_by_css_selector('.ctx-box > .title > a')
is_display = WebDriverWait(driver, 20).until(lambda driver: price.is_displayed())

print(is_display)
if is_display:
    # 如果元素可见,再执行点击,输入,清空等操作
    price.click()
else:
    # 不可见
    pass

driver.close()




猜你喜欢

转载自blog.csdn.net/qq_33472765/article/details/80785253