您的位置: 网站首页> selenium爬虫> 当前文章
强制等待、显式等待、隐式等待代码示例
老董-我爱我家房产SEO2020-07-28190围观,135赞
场景:
1.打开百度,等待输入框元素和搜搜按钮出现(输入框和搜索按钮出现才说明网页加载好了)
2.输入www.pythjon66.com,点击搜索
3.在搜索结果页等待下一页这个元素出现(出现下一页的话,说明网页加载到了底部,页面的数据比较全了)
一:强制等待
- # -*- coding: utf-8 -*-
- import time
- from selenium import webdriver
- from selenium.webdriver.common.by import By
- from selenium.webdriver.support.ui import WebDriverWait
- from selenium.webdriver.support import expected_conditions as EC
- from selenium.webdriver.chrome.options import Options
- def get_html(kwd, retry=2):
- try:
- driver.get('https://www.baidu.com/')
- # 强制等待5秒尽量确保页面加载好
- time.sleep(5)
- # 输入框
- input = driver.find_element_by_id('kw')
- input.click() # 先click后clear,直接send_keys容易丢失字符
- input.clear()
- # 输入文字
- for wd in kwd:
- input.send_keys(wd)
- # 搜索按钮
- baidu = driver.find_element_by_id('su')
- # 点击搜索
- baidu.click()
- # 强制等待5秒尽量让搜索结果页加载完
- time.sleep(5)
- except Exception as e:
- print(e)
- time.sleep(10)
- if retry > 0:
- get_html(kwd, retry - 1)
- else:
- title = driver.title
- return title
- if __name__ == "__main__":
- pc_ua = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'
- option = Options()
- prefs = {
- 'profile.default_content_setting_values': {
- 'images' : 2, # 禁止图片加载
- 'notifications': 2 # 禁止弹窗
- }
- }
- option.add_experimental_option('prefs', prefs)
- driver = webdriver.Chrome(options=option)
- title = get_html('www.python66.com')
- print(title)
- driver.quit()
二:显式等待
- # -*- coding: utf-8 -*-
- import time
- from selenium import webdriver
- from selenium.webdriver.common.by import By
- from selenium.webdriver.support.ui import WebDriverWait
- from selenium.webdriver.support import expected_conditions as EC
- from selenium.webdriver.chrome.options import Options
- def get_html(kwd, retry=2):
- try:
- driver.get('https://www.baidu.com/')
- # 输入框元素,显式等待设定最多5秒
- input = WebDriverWait(driver, 5).until(
- EC.visibility_of_element_located((By.ID, "kw"))
- )
- input.click() # 先click后clear,直接send_keys容易丢失字符
- input.clear()
- # 输入文字
- for wd in kwd:
- input.send_keys(wd)
- # 搜索按钮元素,显式等待设定最多5秒
- baidu = WebDriverWait(driver, 5).until(
- EC.visibility_of_element_located((By.ID, "su"))
- )
- # 点击搜索
- baidu.click()
- # 下一页,显式等待设定最多5秒(有的词没有相关搜索可能报错)
- xg_serach = WebDriverWait(driver, 15).until(
- EC.visibility_of_element_located((By.CLASS_NAME, "tt"))
- )
- except Exception as e:
- print(e)
- time.sleep(10)
- if retry > 0:
- get_html(kwd, retry - 1)
- else:
- title = driver.title
- return title
- if __name__ == "__main__":
- pc_ua = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'
- option = Options()
- prefs = {
- 'profile.default_content_setting_values': {
- 'images' : 2, # 禁止图片加载
- 'notifications': 2 # 禁止弹窗
- }
- }
- option.add_experimental_option('prefs', prefs)
- driver = webdriver.Chrome(options=option)
- title = get_html('www.python66.com')
- print(title)
- driver.quit()
三、隐式等待
- # -*- coding: utf-8 -*-
- import time
- from selenium import webdriver
- from selenium.webdriver.chrome.options import Options
- def get_html(kwd, retry=2):
- try:
- driver.get('https://www.baidu.com/')
- # 输入框
- input = driver.find_element_by_id('kw')
- input.click() # 先click后clear,直接send_keys容易丢失字符
- input.clear()
- # 输入文字
- for wd in kwd:
- input.send_keys(wd)
- print(driver.window_handles,driver.current_url)
- # 搜索按钮
- baidu = driver.find_element_by_id('su')
- # 点击搜索
- baidu.click()
- # 底部文本 此处也会隐式等待
- element = driver.find_element_by_id('help')
- except Exception as e:
- print(e)
- time.sleep(10)
- if retry > 0:
- get_html(kwd, retry - 1)
- else:
- print(driver.window_handles,driver.current_url)
- title = driver.title
- return title
- if __name__ == "__main__":
- pc_ua ='Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'
- option = Options()
- prefs = {
- 'profile.default_content_setting_values': {
- 'images' : 2, # 禁止图片加载
- 'notifications': 2 # 禁止弹窗
- }
- }
- option.add_experimental_option('prefs', prefs)
- driver = webdriver.Chrome(options=option)
- # 隐式等待设置5秒
- driver.implicitly_wait(30)
- title = get_html('python')
- print(title)
- if __name__ == "__main__":
- pc_ua = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'
- option = Options()
- prefs = {
- 'profile.default_content_setting_values': {
- 'images' : 2, # 禁止图片加载
- 'notifications': 2 # 禁止弹窗
- }
- }
- option.add_experimental_option('prefs', prefs)
- driver = webdriver.Chrome(options=option)
- # 隐式等待设置5秒
- driver.implicitly_wait(5)
- title = get_html('www.python66.com')
- print(title)
- # driver.quit() #如果设置了driver.quit()会很快退出,网页的title还是百度首页的title
['CDwindow-0C09496C4890920231EFAB157730936A'] https://www.baidu.com/ ['CDwindow-0C09496C4890920231EFAB157730936A'] https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=python&rsv_t=8a68lZY5YfYYb3CvaeMfYM9TJANA52kQOO484WvXZOLSo7BSB5x0t1xvfgE&rsv_enter=0&rsv_dl=tb&rsv_sug3=7&rsv_sug1=1&rsv_sug7=100&inputT=270&rsv_sug4=325 python_百度搜索
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
相关文章
文章评论
-
强制等待、显式等待、隐式等待代码示例文章写得不错,值得赞赏