Python爬虫学习笔记(Selenium(3))

9.几种等待方式

固定等待:time.sleep(seconds)

隐式等待:driver.implicitly_wait(seconds)

显示等待(推荐):

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

browser = webdriver.Chrome()
url = 'https://world.taobao.com'
browser.get(url)
wait = WebDriverWait(browser,10) #指定最长等待时间
input = wait.until(EC.presence_of_element_located((By.ID,'mq'))) #等待条件为:10秒内IDmq的节点出现,成功则返回节点
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'form'))) #等待条件:10内该CSS选择器选中的节点可点击返回这个按钮节点
print(input,'\n',button)

 

 

Expected Conditions 类提供的预期条件判断方法

title_is:  判断当前页面的title是否等于预期
title_contains:  判断当前页面的title是否包含预期字符串
presence_of_element_located:  判断某个元素是否被加到了dom树里,并不代表该元素一定可见
visibility_of_element_located:  判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0
visibility_of:  跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了
presence_of_all_elements_located:  判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是'column-md-3',那么只要有1个元素存在,这个方法就返回True
text_to_be_present_in_element:  判断某个元素中的text是否 包含 了预期的字符串
text_to_be_present_in_element_value:  判断某个元素中的value属性是否包含了预期的字符串
frame_to_be_available_and_switch_to_it:  判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
invisibility_of_element_located:  判断某个元素中是否不存在于dom树或不可见
element_to_be_clickable - it is Displayed and Enabled:  判断某个元素中是否可见并且是enable的,这样的话才叫clickable
staleness_of:  等某个元素从dom树中移除,注意,这个方法也是返回True或False
element_to_be_selected:  判断某个元素是否被选中了,一般用在下拉列表
element_located_to_be_selected :判断元素的位置是被选中
element_selection_state_to_be:判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be:跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator
alert_is_present:判断页面上是否存在alert

 

10.前进后退

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
import time

browser = webdriver.Chrome()
#url = 'https://world.taobao.com'
browser.get('https://www.baidu.com/') #打开百度
browser.get('https://how2j.cn?p=68555') #打开网页1
browser.get('https://blog.csdn.net/qq_33360009/article/details/104085348') #打开网页2
browser.back() #后退,回到网页1
time.sleep(1)
browser.forward() #前进,回到网页2

 

 

 

11.cookies

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
#import time

browser = webdriver.Chrome()
url = 'https://how2j.cn?p=68555'
browser.get(url)
print(browser.get_cookies()) #获取所有cookies
browser.add_cookie({'name':'name','domain':'www.zhihu.com','value':'felix'}) #传入字典,添加cookies
print(browser.get_cookies()) #获取新的cookies
browser.delete_all_cookies() #删除所有当前cookies
print(browser.get_cookies())

 

 

12.选项卡管理

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
import time

browser = webdriver.Chrome()
url = 'https://www.baidu.com'
browser.get(url) #访问百度
browser.execute_script('window.open()') #开启新的选项卡
print(browser.window_handles) #获取当前开启的所有选项卡,返回选项卡的代号列表
browser.switch_to_window(browser.window_handles[1]) # 跳转到第二个开启的选项卡
browser.get('https://world.taobao.com') #在新开启的选项卡打开新的页面
time.sleep(1)
browser.switch_to_window(browser.window_handles[0]) #切换回第一个选项卡
browser.get('https://how2j.cn?p=68555')

 

13.异常处理

from selenium import webdriver
from selenium.common.exceptions import TimeoutException,NoSuchElementException

browser = webdriver.Chrome()
try:
    browser.get('https://how2j.cn?p=68555') #访问百度
except TimeoutException: #超时
    print('Time out')
try:
    browser.find_element_by_id('hello')
except NoSuchElementException: #查找元素失败
    print('NO Element')
finally:
    browser.maximize_window() #窗体最大化

发布了48 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_33360009/article/details/104299753