• 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
    ')
    
    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")
    
    # 有的系统要加 '
    '
    # 有的系统要加 '
    '
    # Sendkeys()中添加文件的路径名
    shell.Sendkeys(r"f:picpsb.jpg" + " ") 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)_华为手机、荣耀手机、官网正品保障

    保存的图片如图:

  • 相关阅读:
    intelliJ IDEA 全屏键盘手
    NoNodeAvailableException异常的解决
    Java HotSpot(TM) Client VM 与 server VM 的配置
    乐优商城问题1:新增品牌失败
    Linux安装nginx的环境要求
    NeoVIM安装使用
    ubuntu18.04 开机定时启动任务
    【Eclipse+PyDev】使用Python的IDE安装及配置详解
    ARM开发板挂载Ubuntu18.04主机的NFS共享文件夹
    Ubuntu18.04 解决umount: /mnt: device is busy
  • 原文地址:https://www.cnblogs.com/wilson-5133/p/10964662.html
Copyright © 2020-2023  润新知