1. 程式人生 > 實用技巧 >selenium淺談,Chrome與無頭瀏覽器

selenium淺談,Chrome與無頭瀏覽器

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.select import Select
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.chrome.options import Options


# 選擇哪一個驅動,return driver控制代碼
def web1(web=4):
if web == 4: # 使用nohedld-chrome
chrome_options = Options()
# 加屬性,使用無頭模式
chrome_options.add_argument('--headless')
# 加屬性,規避chrome自身bug
chrome_options.add_argument('--disable-gpu')
# 找到driver
driver = webdriver.Chrome(options=chrome_options)
# 瀏覽器最大化
driver.maximize_window()
driver.get('url')
# return driver控制代碼
return driver
else:
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('url')
return driver


# time 操作時間模組
def web_time(second):

return time.sleep(second)


# 截圖
def web_png():
driver = web1()
screen = driver.get_screenshot_as_file('檔案路徑+圖片名稱')
screen2 = driver.save_screenshot('檔案路徑+圖片名稱')
return screen, screen2


#獲取屬性值
def web_attribute():
driver = web1()
attribute = driver.find_element_by_id('xxx').get_attribute('class')
return attribute


# js呼叫
def web_js():
driver = web1()
# js 點選
driver.execute_script('arguments[0].click()','elment')
# js 輸入
driver.execute_script('arguments[0].value=“xxx”', 'elment')
# js 滑鼠滑動
driver.execute_script('arguments[0].ScrollIntoview()', 'elment')


# select
def web_select():
driver = web1()
ele = driver.find_element_by_id('xxx')
# 通過Select選項的索引
Select(ele).select_by_index('1')
# 通過Select選項的值
Select(ele).select_by_value('20')
# 通過Select的選項的value屬性值來定位
Select(ele).select_by_visible_text('每頁顯示20條')


# Actionchains滑鼠操作
def web_actions():
driver = web1()
move = driver.find_element_by_id('xxx')
# 滑鼠移動到move元素
ActionChains(driver).move_to_element(move).perform()
# 滑鼠移動到(x,y)座標
ActionChains(driver).move_by_offset(move).perform()
# 滑鼠拖拽到move1元素
move1 = driver.find_element_by_id('xxx')
ActionChains(driver).drag_and_drop(move).perform()
# 滑鼠拖拽到某個(x,y)座標
ActionChains(driver).drag_and_drop_by_offset('x','y').perform()


# Keys鍵盤操作
def web_keys():
driver = web1()
# 快捷鍵全選
driver.find_element_by_id('xx').send_keys(Keys.CONTROL+'a')
# 快捷鍵剪下
driver.find_element_by_id('xx').send_keys(Keys.CONTROL,'x')
# 快捷鍵貼上
driver.find_element_by_id('xx').send_keys(Keys.CONTROL+'v')
# 快捷鍵複製
driver.find_element_by_id('xx').send_keys(Keys.CONTROL+'c')
# 快捷鍵刪除
driver.find_element_by_id('xx').send_keys(Keys.BACK_SPACE)
# 快捷鍵空格
driver.find_element_by_id('xx').send_keys(Keys.SPACE)
# 快捷鍵回車
driver.find_element_by_id('xx').send_keys(Keys.ENTER)


# 隱形等待,頁面每個元素都進行等待,增加執行時間
def web_imp(second):
driver = web1()
return driver.implicitly_wait(second)


# 顯性等待,配合until()跟until_not()方法,根據EC靈活等待
def web_wait():
driver = web1()
# 程式每0.2秒看一次頁面,如果成立就執行下一步,否則繼續等待,超過5秒丟擲TimeoutException
WebDriverWait(driver, 5, 0.2).until(EC.visibility_of_element_located(By.XPATH, 'ele')).click()


# EC模組作為預期結果,經常與until()跟until_not()連用
def web_ec():
# 驗證元素是否出現,一個符合元素就行
EC.presence_of_element_located(By.ID, 'ele')
# 驗證元素是否出現,需要等所有符合元素都加載出來
EC.presence_of_all_elements_located(By.ID, 'ele')
# 驗證元素是否可見,傳入引數是元組locator
EC.visibility_of_element_located(By.ID, 'ele')
# 驗證元素是否可見,傳入引數是元組locator
EC.invisibility_of_element_located(By.ID, 'ele')
# 驗證元素是否可見,傳入引數是webelement,跟visibility_of_element_located(By.ID, 'ele')效果一樣
EC.invisibility_of_element_located('ele')
# 判斷元素是否可以點選,傳入元組locator
EC.element_to_be_clickable(By.ID, 'ele')