目錄
0. 上節(jié)內(nèi)容回顧
1 . 瀏覽器基本操作
1.1 啟動(dòng) 退出
1. 手動(dòng)安裝driver ,啟動(dòng)瀏覽器時(shí),需要傳遞2個(gè)參數(shù):
1.2 窗口設(shè)置
1.3 頁面導(dǎo)航
1.4 獲取頁面信息
1.5 頁面截圖
2. 瀏覽器的高級操作
2.1 窗口切換
2.2 操作Cookies
2.3 執(zhí)行JavaScript
今日內(nèi)容:瀏覽器交互(調(diào)整窗口大小、導(dǎo)航、獲取網(wǎng)頁數(shù)據(jù)、窗口切換、讀寫cookies、執(zhí)行js、處理alert)
0. 上節(jié)內(nèi)容回顧
- selenium 有三大組件:其中核心是 webdriver
-
selenium webdriver 中有兩大對象:
- 對瀏覽器的操作:WebDriver
- 對元素的操作: WebElement
- selenium 4 已經(jīng)發(fā)布,具有新的特性和語法
- selenium 測試環(huán)境,可以手動(dòng)搭建,也可以自動(dòng)化搭建
1 . 瀏覽器基本操作
1.1 啟動(dòng) 退出
1. 手動(dòng)安裝driver ,啟動(dòng)瀏覽器時(shí),需要傳遞2個(gè)參數(shù):
- service: 瀏覽器驅(qū)動(dòng)對象,driver的存放路徑 (自動(dòng)配置,可以省略service參數(shù))
- options:瀏覽器參數(shù)對象
- ChromeDriver: https://chromedriver.chromium.org/capabilities
- Chrome: https://peter.sh/experiments/chromium-command-line-switches/
driver.quit()
with driver:????????driver.get("https://baidu.com")
with webdriver . Chrome ( service = service , options = options ) as driver :????????driver . get ( "https://baidu.com" )
關(guān)于瀏覽器自動(dòng)關(guān)閉
因?yàn)槭窃诤瘮?shù)內(nèi)執(zhí)行的瀏覽器操作,在函數(shù)執(zhí)行完畢之后,程序內(nèi)所有的步驟都結(jié)束了,關(guān)于這段程序的進(jìn)程也就結(jié)束了,瀏覽器包含在內(nèi)。
1.2 窗口設(shè)置
方法
|
作用
|
set_window_size(width, height)
|
設(shè)置窗口大小
|
get_window_size()
|
獲取窗口大小 |
set_window_position(x,y)
|
設(shè)置窗口位置
|
get_window_position()
|
獲取窗口位置
|
set_window_rect()
|
設(shè)置窗口大小
+
位置
|
get_window_rect()
|
獲取窗口大小
+
位置
|
maximize_window()
|
窗口最大化
|
minimize_window()
|
窗口最小化
|
fullscreen_window()
|
全屏
|
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=chrome_options) # 啟動(dòng)瀏覽器
driver.get("https://www.baidu.com/") # 訪問指定的頁面
#ele = driver.find_element(By.XPATH, '//*[@id="kw"]')
#ele.send_keys("百度一下?")
print(driver.get_window_size()) #獲取窗口大小
print(driver.get_window_position()) #獲取窗口位置
print(driver.get_window_rect()) #獲取窗口大小 + 位置
#driver.minimize_window() #窗口最小化
driver.fullscreen_window() #全屏
driver.set_window_size(900,600)
#driver.quit() #手動(dòng)退出,顯式退出
1.3 頁面導(dǎo)航
方法
|
作用
|
get(url)
|
跳轉(zhuǎn)到指定頁面
|
back()
|
返回上個(gè)頁面
|
forward()
|
前進(jìn)到下一個(gè)頁面
|
refresh()
|
刷新當(dāng)前頁面
|
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=chrome_options) # 啟動(dòng)瀏覽器
driver.get("https://www.baidu.com/") # 訪問指定的頁面
driver.back() #回到空白頁面
driver.forward() # 前進(jìn)到百度
driver.refresh() # 刷新頁面
#driver.quit() #手動(dòng)退出,顯式退出
1.4 獲取頁面信息
屬性
|
內(nèi)容
|
例子
|
name
|
瀏覽器名字
|
chrome
|
capabilities
|
瀏覽器能力
|
{'browserVersion': '95.0.463',..}
|
current_url
|
當(dāng)前網(wǎng)址
|
https://baidu.com
|
title
|
頁面
title
|
百度一下
|
page_source
|
HTML
源碼
|
<html><title>
百度一下
</title
|
current_window_handle
|
當(dāng)前窗口
ID
|
ANC-SJ2
|
window_handles
|
所有窗口
ID
|
['ANC-SJ2', 'S92-1C2']
|
switch_to
|
窗口切換
|
tab
、
window
、
alert
、
frame
|
timeouts
|
超時(shí)時(shí)間
|
window_handles 可以用來統(tǒng)計(jì)窗口的數(shù)量,或者切換窗口
switch_to 可以創(chuàng)建新窗口、切換iframe頁面、處理alert彈窗文章來源:http://www.zghlxwxcb.cn/news/detail-405201.html
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=chrome_options) # 啟動(dòng)瀏覽器
driver.get("https://www.baidu.com/") # 訪問指定的頁面
key_l = ["name", "capabilities", "current_url", "title", "current_window_handle", "window_handles",
"switch_to", "timeouts"]
for key in key_l: # 從列表中遍歷屬性
print(key)
print(getattr(driver, key))
print("-" * 30)
# driver.quit() #手動(dòng)退出,顯式退出
1.5 頁面截圖
方法
|
作用
|
例子
|
get_screenshot_as_png()
|
截圖的二進(jìn)制內(nèi)容
|
b'\x89PNG\r\n\x1a\n\x..
|
get_screenshot_as_base64()
|
截圖的
base64
內(nèi)容
|
iVBORw0KGgoAAAAN...
|
get_screenshot_as_file(path)
|
截圖保存到文件
|
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=chrome_options) # 啟動(dòng)瀏覽器
driver.get("https://www.baidu.com/") # 訪問指定的頁面
b = driver.get_screenshot_as_png() # 返回二進(jìn)制
print(b)
with open("a.png", "wb") as f:
f.write(b)
print("*" * 30)
b64 = driver.get_screenshot_as_base64() # 返回字符串
print(b64)
b = base64.b64decode(b64) # 字符串轉(zhuǎn)二進(jìn)制
with open("b.png", "wb") as f:
f.write(b)
print("*" * 30)
driver.get_screenshot_as_file("c.png") #截圖保存到文件
driver.quit() #手動(dòng)退出,顯式退出
2. 瀏覽器的高級操作
2.1 窗口切換
方法
|
作用
|
例子
|
switch_to.alert
|
切換到彈窗
|
|
switch_to.active_element
|
切換到聚焦的元素
|
|
switch_to.frame('frame_name')
|
切換到
iframe
|
|
switch_to.new_window('window_type')
|
創(chuàng)建新窗口
|
|
switch_to.window('window_name')
|
切換到窗口
|
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=chrome_options) # 啟動(dòng)瀏覽器
print("當(dāng)前頁面的id是",driver.current_window_handle)
print("當(dāng)前所有的窗口ID是",driver.window_handles)
driver.switch_to.new_window("tab") #創(chuàng)建tab
driver.switch_to.new_window("window") #創(chuàng)建windows
print("當(dāng)前頁面的id是",driver.current_window_handle)
print("當(dāng)前所有的窗口ID是",driver.window_handles)
#切換窗口
for win_id in driver.window_handles: #遍歷窗口ID
driver.switch_to.window(win_id) #根據(jù)ID切換窗口
print("當(dāng)前頁面ID是",driver.current_window_handle)

chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=chrome_options) # 啟動(dòng)瀏覽器
driver.get("http://118.24.147.95:8086/switch_to.html") # 跳轉(zhuǎn)到測試頁面
# 1. 處理alert 彈窗
alert = driver.switch_to.alert # js彈窗是阻塞型代碼
print(alert)
alert.accept() # 點(diǎn)擊確定按鈕
# alert.dismiss() # 點(diǎn)擊取消按鈕
# alert.send_keys("~") # 向彈出輸入內(nèi)容
# 2.切換iframe
# 方法1. iframe 序號
# driver.switch_to.frame(0) # 0表示第一個(gè)
# 方法2. iframe 元素本身
l = driver.find_elements(By.TAG_NAME, "iframe") # 定位到所有的iframe元素
driver.switch_to.frame(l[0]) # 把元素傳遞進(jìn)行切換
ele = driver.find_element(By.CSS_SELECTOR, "h2")
print(ele)
2.2 操作Cookies
方法
|
作用
|
add_cookie(cookie:dict)
|
增加指定
cookie
|
get_cookie(name)
|
獲取指定
cookie
|
delete_cookie(name)
|
刪除指定
cookie
|
delete_all_cookies()
|
刪除
所有
cookies
|
get_cookies()
|
獲取
所有
cooki
|
文章來源地址http://www.zghlxwxcb.cn/news/detail-405201.html
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=chrome_options) # 啟動(dòng)瀏覽器
# http://118.24.147.95:8087/cookies 顯示cookies
# http://118.24.147.95:8087/cookies/set/a/1 設(shè)置cookie a=1
# cookie 一定是字符串
driver.get("http://118.24.147.95:8087/cookies/set/a/1") # 跳轉(zhuǎn)到測試頁面
driver.add_cookie({"name": "b", "value": "2"}) # 手動(dòng)添加cookie
driver.delete_cookie("a") # 手動(dòng)刪除
driver.refresh() # 刷新頁面,展示最新的cookie結(jié)果
print(driver.get_cookies()) # 獲取所有的cookie
#driver.quit()
[{'domain': '118.24.147.95', 'httpOnly': False, 'name': 'b', 'path': '/', 'secure': False, 'value': '2'}]
2.3 執(zhí)行JavaScript
方法
|
作用
|
例子
|
pin_script(script, script_key=None)
|
暫存
JS
片段
|
|
unpin(script_key)
|
取消暫存
|
|
get_pinned_scripts()
|
查看所有暫存
|
|
execute_script
(script, *args)
|
執(zhí)行
JS
代碼,或暫存的
JS
|
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=chrome_options) # 啟動(dòng)瀏覽器
driver.execute_script("alert(1)") # 不需要返回值
driver.switch_to.alert.accept() # 點(diǎn)擊確定按鈕
a = driver.execute_script("return 1+1") # 不需要返回值
print("1+1=", a) # 返回值可以打印
a = driver.execute_script("return 1+arguments[0]", 100) # 傳遞參數(shù)
print("a = ", a)
ele = driver.find_element(By.TAG_NAME, "body")
driver.execute_script("console.log(arguments[0])", ele) # 傳遞元素
# driver.quit()

- 瀏覽器的一般操作 :啟動(dòng)、退出、導(dǎo)航、獲取信息
- 瀏覽器高級操作: 窗口切換、操作Cookies,執(zhí)行JS
- 啟動(dòng)參數(shù):最大化、無頭模式
到了這里,關(guān)于Python+Selenium4瀏覽器交互_web自動(dòng)化(2)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!