天天看點

<day002>Selenium基本操作

任務1:Selenium基本操作

  

from selenium import webdriver
# 通用選擇
from selenium.webdriver.common.by import By
# 動作
from selenium.webdriver import ActionChains

from selenium.webdriver.common.keys import Keys
# 抛出異常
from selenium.webdriver.support import expected_conditions as EC
# 異常處理 逾時和為發現元素
from selenium.common.exceptions import TimeoutException,NoSuchElementException
from selenium.webdriver.support.wait import WebDriverWait
import time

# 申明驅動浏覽器對象,支援Android,BlackBerry等手機端浏覽器
browser = webdriver.Chrome()
# browser = webdriver.PhantomJS

# 設定浏覽器視窗大小
browser.set_window_size(1400, 900)

try:
	# 必須輸入完整URL,直接輸入www.baidu.com不行
	# 打開URL為XXX的網頁
	browser.get('http://www.baidu.com')
	# 開啟新頁籤(開啟新視窗)
	browser.execute_script('window.open()')
	# 列印目前所有句柄
	print(browser.window_handles)
	# 切換句柄(頁籤)
	browser.switch_to.window(browser.window_handles[1])
	# switch_to_window被switch_to.window代替,用法一緻
	# browser.switch_to_window(browser.window_handles[1])
	# 在新的頁籤中打開XXX網頁
	browser.get('https://www.taobao.com/')
	# 切回第一個頁籤
	browser.switch_to.window(browser.window_handles[0])
	# 直接通過id查找
	input1 = browser.find_element_by_id('kw')
	# 通過css選擇器查找,直接在檢查中Cope→Cope selector
	input2 = browser.find_element_by_css_selector('#kw')
	# 通過Xpath選擇器查找,可以直接在Cope→Cope xpath
	input3 = browser.find_element_by_xpath('//*[@id="kw"]')

	# 通用選擇,需要先引入By   from selenium.webdriver.common.by import By
	# By後面可以跟ID,CSS_SELECTOR,XPATH等,第二個參數就上面括号内的參數
	input4 = browser.find_element(By.ID, 'kw')

	# 多個節點也是按照上面進行查找,隻是element後面加個s,find_elements
	time.sleep(1)
	# 輸入框鍵入'xx'
	input1.send_keys('美女')
	# 清空文字
	# input1.clear()
	# 直接敲擊鍵盤Enter鍵
	# input.send_keys(Keys.ENTER)
	# 通過找到id為su的搜尋鍵,滑鼠單擊
	browser.find_element_by_id('su').click()

	time.sleep(1)
	browser.execute_script('window.open()')
	browser.switch_to.window(browser.window_handles[2])
	browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
	# 切換到子Frame 通常節點名字叫iframe
	browser.switch_to.frame('iframeResult')
	# 切換回父Frame
	# browser.switch_to.parent_frame()
	# 找到2個标簽
	source = browser.find_element(By.CSS_SELECTOR, '#draggable')
	target = browser.find_element(By.CSS_SELECTOR, '#droppable')
	# 動作鍊必須先引入 from selenium.webdriver import ActionChains
	action = ActionChains(browser)
	# 執行拖拽動作
	# action.drag_and_drop(source, target)
	# 有action 必須有perform方法
	action.perform()

	browser.execute_script('window.open()')
	browser.switch_to.window(browser.window_handles[3])
	browser.get('https://www.taobao.com/')
	browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
	logo = browser.find_element(By.CSS_SELECTOR,'#q')
	print(logo)
	# 擷取輸入框屬性值
	print(logo.get_attribute('aria-label'))
	# 擷取搜尋按鈕的文字
	input5 = browser.find_element(By.XPATH,'//*[@id="J_TSearchForm"]/div[1]/button')
	# 文字
	print(input5.text)
	# 标簽名
	print(input5.tag_name)
	# id
	print(input5.id)
	# 在頁面中的相對位置
	print(input5.location)
	# 節點大小
	print(input5.size)

	# 顯式等待(等待直到标簽出現或超過最大等待時間)
	# 設定最大等待時間是10秒
	# 報錯先引入 from selenium.webdriver.support import expected_conditions as EC
	wait = WebDriverWait(browser,10)
	# 等待直到id為q的标簽出現
	input6 = wait.until(EC.presence_of_element_located((By.ID,'q')))
	# 等待直到按鈕可以被點選
	input7 = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))

	browser.switch_to.window(browser.window_handles[0])
	# 前進和後退
	browser.back()
	time.sleep(3)
	browser.forward()

	# 增加一個cookie
	browser.add_cookie({'name':'xiaohei','age':'123'})
	# 删除 cookie
	# browser.delete_cookie()
	# browser.delete_all_cookies()

	# 目前URL
	print(browser.current_url)
	# Cookie
	print(browser.get_cookies())
	# 源代碼
	# print(browser.page_source)
except NoSuchElementException:
	print("No Element")

# 一定會做的事情
finally:
	# 關閉浏覽器
	pass
# browser.close()      
day