---恢復內容開始---css
設置元素等待html
webDriver提供了兩種類型的等待:顯式等待和隱式等待python
顯式等待不說了,就用簡單的隱式等待便可web
WebDriver提供了implicitly_wait()方法來實現隱式等待,默認設置爲0。它的用法相對來講要簡單得多。windows
from selenium import webdriver
# 導入異常類型 from selenium.common.exceptions import NoSuchElementException from time import ctime driver = webdriver.Chrome() # 設置隱式等待爲10秒 driver.implicitly_wait(10)
driver.get("http://www.baidu.com") try: print(ctime()) driver.find_element_by_id("kw22").send_keys('selenium')
# 捕捉超時異常 except NoSuchElementException as e: print(e) finally: print(ctime()) driver.quit()
implicitly_wait()默認參數的單位爲秒,本例中設置等待時長爲10秒。首先這10秒並不是一個固定的等待時間,它並不影響腳本的執行速度。其次,它並不針對頁面上的某一元素進行等待。當腳本執行到某個元素定位時,若是元素能夠定位,則繼續執行;若是元素定位不到,則它將以輪詢的方式不斷地判斷元素是否被定位到。假設在第6秒定位到了元素則繼續執行,若直到超出設置時長(10秒)尚未定位到元素,則拋出異常。瀏覽器
定位一組元素的方法(比以前的單個元素多加了個s)cookie
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
例:ui
from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("https://www.baidu.com") driver.find_element_by_id("kw").send_keys("selenium") driver.find_element_by_id("su").click() sleep(1) # 定位一組元素 texts = driver.find_elements_by_xpath('//div/h3/a') # 循環遍歷出每一條搜索結果的標題 for t in texts: print(t.text) driver.quit()
窗口切換spa
from selenium import webdriver import time driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get("http://www.baidu.com") # 得到百度搜索窗口句柄 sreach_windows = driver.current_window_handle driver.find_element_by_link_text('登陸').click() driver.find_element_by_link_text("當即註冊").click() # 得到當前全部打開的窗口的句柄 all_handles = driver.window_handles # 進入註冊窗口 for handle in all_handles: if handle != sreach_windows: # 切換到句柄所表明的窗口 driver.switch_to.window(handle) print('now register window!') driver.find_element_by_name("userName").send_keys('username') driver.find_element_by_name('password').send_keys('password') time.sleep(2)
警告框處理
code
在WebDriver中處理JavaScript所生成的alert、confirm以及prompt十分簡單,具體作法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,而後使用text/accept/dismiss/ send_keys等方法進行操做。
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get('http://www.baidu.com') # 鼠標懸停至「設置」連接 link = driver.find_element_by_link_text('設置') ActionChains(driver).move_to_element(link).perform() # 打開搜索設置 driver.find_element_by_link_text("搜索設置").click()
time.sleep(1)
# 保存設置 driver.find_element_by_link_text("保存設置").click() time.sleep(2)
# 打印警告框中的信息
print(driver.switch_to.alert.text)
# 經過driver.switch_to.alert()獲取警告框,accept()接受警告框
driver.switch_to.alert.accept()
driver.quit()
下拉框.
from selenium import webdriver from time import sleep # 導入 Select類(Select類專門定位select標籤) from selenium.webdriver.support.select import Select driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get('http://www.baidu.com') # 鼠標點擊「設置」連接 driver.find_element_by_link_text('設置').click() sleep(1) # 打開搜索設置 driver.find_element_by_link_text("搜索設置").click() sleep(2) # 定位搜索結果顯示條數 sel = driver.find_element_by_xpath("//select[@id='nr']")
# <select name="NR" id="nr">
# <option value="10" selected="">每頁顯示10條</option>
# <option value="20">每頁顯示20條</option>
# <option value="50">每頁顯示50條</option>
# </select>
# 以上是該下拉框的源碼.value值就在這裏找
# select_by_value(value)方法用於定位選項中的value值
Select(sel).select_by_value('50') # 顯示50條
driver.quit()
上傳文件
只須要定位到[上傳文件]元素,而後發送文件路徑便可
driver.find_element_by_name('file').send_keys("C:/Users/Administrator/Desktop/upload.html")
cookie信息
# 得到cookie信息 cookie= driver.get_cookies() # 向cookie的name 和value中添加會話信息 driver.add_cookie({'name': 'key-aaaaaaa', 'value': 'value-bbbbbb'})
調用js代碼
js="window.scrollTo(100,450);" # 調用js代碼的方法 driver.execute_script(js)
截圖方法
driver.get_screenshot_as_file("D:\\baidu_img.jpg")
關閉瀏覽器
# 關閉單個窗口 driver.close() # 關閉全部窗口 driver.quit()
---恢復內容結束---