python 操作 selenium 詳解

 

  • 頁面加載等待

一. 隱式等待

Selenium 沒有在 DOM 中找到節點,將繼續等待,超出設定時間後,則拋出找不到節點的異常。

from selenium import webdriver

browser = webdriver.Chrome()

# 設置 隱式等待
browser.implicitly_wait (10)
browser.get(’https://www.zhihu.com/explore' )
input = browser.find_element_by_class_name(’zu-top-add-question’)

print(input) 

二 . 顯式等待

方法一: time.sleep(5)

方法二:

指定要查找的節點,然後指定最長等待時間 如果在規定時間內加載出來了這個節點,就返回查找的節點,

如果到了規定時間依然沒有加載該節點, 則拋出超時異常。

用 plicitly_wait()方法實現了隱式等待(默認時間爲0):

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()
browser.get(’https://www.taobao.com/’)

# 顯式等待方法一
# time.sleep(10)

# 顯式等待-方法二
wait = WebDriverWait(browser, 10)
input = wait.until(EC.presence_of_element_located( (By . ID,’q’))) 
button = wait.until(EC.element to be clickable((By.CSS_SELECTOR,’ .btn search')))

print(input, button)

 

  • 輸入文字/清空文字/點擊按鈕

  • 執行 JavaScript 的操作

對於某些操作, Selenium API 並沒有提供。 比如下拉進度條,它可以直接模擬運行 JavaScrapt,

此時使用 execute script ()方法即可實現 -- 將進度條下拉到最底部,代碼如下:

from selenium import webdriver

browser= webdriver .Chrome()
browser. get (’ https://www.zhihu.com/explore')

# 執行 JS下拉操作
browser .execute_script('window.scrollTo(o, document.body .scrollHeight)’)
browser .execute_script( 'alert(”To Bottom”)') 

 

  • 動作鏈

還有另外一些操作,它們沒有特 定的執行對象,比如鼠標拖曳 鍵盤按鍵等,這些動作用另一種方式來執行,那就是動作鏈.

比如,現在實現 個節點的拖曳操作,將某個節點從一處拖曳到另外一處:

from selenium import webdnver
from selenium.webdriver import ActionChains

browser = webdri ver. Chrome()
url =’ http://www.runoob com/try/try.php?filename=jqueryui i-droppable'
browser.get(url)
browser.switch_ to . frame (' i frar est此')
source = browser. ind element by_css selector('#draggable ' )
target= browser.find_element_by_css_selector('#droppable ' )

# 動作鏈 - 拖拽操作
actions = ActionChains(browser)
actions.drag_and_drop(source, target)
actions. perform() 
#_*_coding: utf-8_*_
from selenium import webdriver
from selenium.webdriver import ActionChains
import time
from selenium.webdriver.common.alert import Alert
browser=webdriver.Chrome()
url="http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
browser.get(url)
#切換到目標元素所在的frame
browser.switch_to.frame("iframeResult")
#確定拖拽目標的起點
source=browser.find_element_by_id("draggable")
#確定拖拽目標的終點
target=browser.find_element_by_id("droppable")
#形成動作鏈
actions=ActionChains(browser)
actions.drag_and_drop(source,target)
#執行
actions.perform()
'''
1.先用switch_to_alert()方法切換到alert彈出框上
2.可以用text方法獲取彈出的文本 信息
3.accept()點擊確認按鈕
4.dismiss()相當於點右上角x,取消彈出框
'''
t=browser.switch_to_alert()
print(t.text)
t.accept()
time.sleep(10)
browser.close()

 

  • 使用Selenium + PhantomJS時報“'phantomjs.exe' executable needs to be in PATH.”

1. 添加 phantomjs 到環境變量

2. 或在代碼中指定 phantomjs 的位置

from selenium import webdriver

driver = webdriver.PhantomJS(executable_path='/usr/local/share/phantomjs-2.1.1-windows\bin\phantomjs.exe')
  • cookies的處理

# -*- coding: utf-8 -*-
from selenium import webdriver
import time

browser=webdriver.Chrome()
browser.get("https://www.zhihu.com/explore")
print(browser.get_cookies())
browser.add_cookie({"name":"name","domain":"www.zhihu.com","value":"germey"})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())
browser.close()

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章