Selenium—浏览器相关操作

设置浏览器大小

浏览器全屏

  • 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)_华为手机、荣耀手机、官网正品保障

保存的图片如图:

 

posted @ 2019-06-04 22:37  落晨  阅读(936)  评论(0编辑  收藏  举报