設置瀏覽器大小
瀏覽器全屏
- driver.maximize_window()
獲取瀏覽器當前窗口大小
-
driver.get_window_size()
改變瀏覽器大小
-
set_window_size(width, height, windowHandle="current")
代碼示例:
from selenium import webdriver import time url = "http://baidu.com" driver = webdriver.Chrome() driver.implicitly_wait(5) driver.get(url) # ----------------- 設置瀏覽器窗口大小 ----------------- # 將窗口最大化 driver.maximize_window() time.sleep(2) # 將窗口大小實例化 window = driver.get_window_size() # 重新定義窗口的寬、高 width = 0.25 * window['width'] height = 0.5 * window['height'] # 設置窗口為上面定義的 driver.set_window_size(width=width, height=height, windowHandle="current") time.sleep(2) # 手寫窗口大小 driver.set_window_size(600, 800, windowHandle="current") driver.quit()
刷新頁面、后退、前進
刷新當前頁面
-
driver.refresh()
頁面后退
-
driver.back()
頁面前進
-
driver.forward()
代碼示例
from selenium import webdriver import time driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get('https://www.baidu.com/') driver.find_element_by_id("kw").send_keys(u'selenium\n') time.sleep(2) # 頁面回退 driver.back() time.sleep(2) # 頁面前進 driver.forward() time.sleep(2) # 頁面刷新 driver.refresh() driver.quit()
上傳文件
-
需要安裝一個 pywin32 庫文件 :pip install pywin32
-
導入庫文件:import win32com.client
-
shell = win32com.client.Dispatch("WScript.Shell")
from selenium import webdriver import time driver = webdriver.Chrome() driver.implicitly_wait(10) # driver.get('https://tinypng.com') driver.get('https://www.tiomg.org') print(driver.title) # driver.find_element_by_css_selector(".target .icon").click() driver.find_element_by_id("fileupload").click() time.sleep(3) # 直接發送鍵盤消息給 當前應用程序, # 前提是瀏覽器必須是當前應用 # pip install pyiwin32 import win32com.client shell = win32com.client.Dispatch("WScript.Shell") # 有的系統要加 '\r' # 有的系統要加 '\r\n'
# Sendkeys()中添加文件的路徑名 shell.Sendkeys(r"f:\pic\psb.jpg" + "\r\n") driver.quit()
凍結頁面
凍結界面,就是將web界面凍結,以便我們定位元素
以華為商城為例:
如果我們要查看:手機--榮耀 的 元素,我們會發現當我們把鼠標挪開后,頁面還原了,我們沒法定為了
這時,我們就需要引入凍結界面的方法:setTimeout(function(){debugger;},5000)
使用方法:
-
-
F12打開開發者工具--點擊 Console
-
輸入 setTimeout(function(){debugger;},5000)
-
其中 5000 可修改,其單位為 ms ;意思為,5s后凍結窗口
-
我們可以在5s內查看元素,使元素可見,並等待窗口凍結
- F8 恢復凍結
-
鼠標懸停
我們既然已經獲取了隱藏的元素,但是我們怎么實現鼠標停留在某一元素呢?
這里我們需要使借助 ActionChains 類,來實現我們的操作
-
move_to_element() 鼠標懸停
截屏
-
get_screenshot_as_file() 窗口截圖
關閉瀏覽器
-
driver.close() 關閉當前窗口
-
driver.quit() 關閉所有窗口--關閉瀏覽器
代碼示例:
# 實現點擊 手機--mate系列,查看所有的mate系列的手機名及相應的價格
from selenium import webdriver import time driver = webdriver.Chrome() # 窗口最大化 driver.maximize_window() # 隱式等待 10s driver.implicitly_wait(10) # 打開 華為商城 driver.get('https://www.vmall.com/') # 導入 ActionChains 類 from selenium.webdriver.common.action_chains import ActionChains # 定位手機的元素 phone = driver.find_element_by_css_selector("#zxnav_0 .category-item-bg") # 鼠標懸停在手機元素上 ActionChains(driver).move_to_element(phone).perform() time.sleep(2) # 定位 HUAWEI Mate系列 元素 mate = driver.find_element_by_xpath('//input[@value="HUAWEI Mate系列"]/../a') # 點擊 Mate 系列 mate.click() # 切換至新窗口 mainWindow = driver.current_window_handle handles = driver.window_handles for handle in handles: driver.switch_to.window(handle) if "Mate" in driver.title: break # 當前窗口截圖保存 # 參數即為保存的路徑和格式,且Picture目錄必須存在 driver.get_screenshot_as_file('E:\\Picture\\Mate.png') # 獲取每一部手機的元素 p_mate = driver.find_elements_by_css_selector('.channel-list ul>li') # 通過for循環,獲取每一部手機的name 和 price for one in p_mate: p_name = one.find_element_by_css_selector('.p-name>a span').text p_price = one.find_element_by_css_selector('.p-price>b').text time.sleep(1) print(p_name, ':', p_price) time.sleep(1) # 關閉當前窗口 driver.close() # 即使窗口關閉,仍需要切回主窗口 driver.switch_to.window(mainWindow) print(driver.title) # 關閉瀏覽器 driver.quit()
輸出結果如下:
HUAWEI Mate 10 : ¥3399 HUAWEI Mate 20 X : ¥4499 HUAWEI Mate 20 Pro : ¥5499 HUAWEI Mate 20 : ¥3499 HUAWEI Mate 20 RS 保時捷設計 : ¥12999 HUAWEI Mate 10 Pro : ¥3999 華為商城(VMALL.COM)_華為手機、榮耀手機、官網正品保障
保存的圖片如圖: