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() #窗體最大化

發佈了51 篇原創文章 · 獲贊 19 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章