设置浏览器大小
浏览器全屏
- 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()
上传文件
-
需要安装一个 pypwin32 库文件 :pip install pypwin32
-
导入库文件: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)_华为手机、荣耀手机、官网正品保障
保存的图片如图: