美文网首页
web自动化-selenium(二)

web自动化-selenium(二)

作者: 在下YM | 来源:发表于2022-02-16 15:56 被阅读0次

    浏览器常用属性和方法

    属性

    • driver.name # 当前浏览器的名字
    • driver.title # 当前网页的标题
    • driver.current_url # 当前网页的 url
    • driver.page_source # 当前网页的源码

    方法

    • driver.close() # 关闭当前窗口
    • driver.quit() # 关闭浏览器
    • 历史
      driver.back() # 历史后退
      driver.forward() # 历史前进
    • 刷新页面
      driver.refresh() # 刷新页面
    • 窗口大小位置
      driver.maximize_window() # 浏览器最大化
      driver.fullscreen_window() # 浏览器全屏
      driver.minimize_window() # 浏览器最小化

    窗口截图

    说明:自动化脚本是由程序去执行的,因此有时候打印的错误信息并不是十分明确。如果在执行出错的时候对当前窗口截图保存,那么通过图片就可以非常直观地看到出错的原因。

    在WebDriver类库中,提供了截图方法,我们只需要调用: driver.get_screenshot_as_file(文件路径.png)

    from selenium.webdriver import Chrome
    
    driver = Chrome('./chromedriver')
    
    # 3. 打开网址
    # file://{本地网址绝对路径}
    driver.get('https://www.baidu.com')
    driver.maximize_window()
    
    driver.implicitly_wait(2)
    
    # 截图保存
    driver.get_screenshot_as_file('error.png')
    
    driver.quit()
    

    执行 javascript 代码

    有时候我们需要在特定页面中执行 javascript 脚本,通过 driver.execute_script(js代码)

    from selenium.webdriver import Chrome
    from selenium.webdriver.support.wait import WebDriverWait
    import traceback
    import time
    
    # 通过指定chromedriver的路径来实例化driver对象
    driver = Chrome('./chromedriver')
    
    # 控制浏览器访问url地址
    driver.get('https://www.baidu.com')
    
    # driver.maximize_window() # 最大化窗口
    
    # 执行js代码
    driver.execute_script("alert('hello world')")
    
    time.sleep(3) # 延时3s
    
    # 退出浏览器
    driver.quit()
    

    cookie

    Cookie 相关的方法

    • driver.get_cookies() # 获取所有的 cookie
    • driver.get_cookie(name) # 获取指定的 cookie
    • driver.delete_cookie(name) # 删除指定的 cookie
    • driver.delete_all_cookies() # 删除所有的 cookie
    • driver.add_cookie(cookie_dict) # 添加一个 cookie cookie_dict {"name":"xxx","value":"xxx"} 可选的 key 是 "path", "domain", "secure", "expiry"
    from selenium.webdriver import Chrome
    from selenium.webdriver.support.wait import WebDriverWait
    import traceback
    import time
    
    # 通过指定chromedriver的路径来实例化driver对象
    driver = Chrome('./chromedriver')
    
    # 控制浏览器访问url地址
    driver.get('http://www.baidu.com')
    
    for cookie in driver.get_cookies():
        print("%s -> %s" % (cookie['name'], cookie['value']))
    
    print('================添加 cookie=====================')
    
    driver.add_cookie({"name": "my-cookie", "value": "my-value"})
    
    for cookie in driver.get_cookies():
        print("%s -> %s" % (cookie['name'], cookie['value']))
    
    print('================删除 cookie=====================')
    driver.delete_cookie('my-cookie')
    
    # print(driver.get_cookies())
    for cookie in driver.get_cookies():
        print("%s -> %s" % (cookie['name'], cookie['value']))
    
    time.sleep(2)
    driver.quit() # 退出浏览器
    

    元素常用属性和方法

    模拟鼠标单击

    点击元素,通过调用 click() 方法

    from selenium.webdriver import Chrome
    import traceback
    import time
    
    # 通过指定chromedriver的路径来实例化driver对象
    driver = Chrome(executable_path='./chromedriver')
    
    # 控制浏览器访问url地址
    # file://{本地文件绝对路径}
    driver.get('file:///****/test.html')  # 打开本地 html 文件
    
    try:
        el = driver.find_element_by_id('button')
        for i in range(10): # 模拟鼠标单击
            el.click()
            time.sleep(1)
    except Exception:
        print(traceback.format_exc())
    finally:
        # 退出浏览器
        driver.quit()
    

    输入框元素填充数据和清空

    如果是输入框元素,可以通过 send_keys(字符串) 将该字符串填充到输入框中,通过 clear() 清空输入框

    from selenium.webdriver import Chrome
    import traceback
    import time
    
    # 通过指定chromedriver的路径来实例化driver对象
    driver = Chrome(executable_path='./chromedriver')
    
    # 控制浏览器访问url地址
    # file://{本地文件绝对路径}
    driver.get('file:///****/test.html')  # 打开本地 html 文件
    
    try:
        el = driver.find_element_by_id('username')
    
        time.sleep(1)
        # 填充数据
        el.send_keys("我的用户名")
        time.sleep(2)
    
        # 清空数据
        el.clear()
        time.sleep(1)
    except Exception:
        print(traceback.format_exc())
    finally:
        # 退出浏览器
        driver.quit()
    

    获取标签的属性

    html 元素有一些属性,这些属性通过 get_attribute(属性名) 来获取

    import time
    from selenium.webdriver import Chrome
    
    driver = Chrome('./chromedriver')
    driver.get('file://{文件绝对路径}')
    
    el = driver.find_element_by_tag_name('body')
    
    # 获取body里面的内置html属性信息
    print(el.get_attribute('innerHTML'))
    

    行为链

    WebDriver 中将元素的点击和发送表单数抽象位行为链,行为链中可以包含一个以上的动过,常见行为如下:

    • 鼠标单击
    • 鼠标右击
    • 鼠标双击
    • 鼠标拖动
    • 鼠标指针移动
    • 按键按下
    • 按键松开
      在实际使用中,通常是组合多个行为来完成一个目标操作,比如:按下 shift --> 按下 a -->松开 a --> 松开 shift

    ActionChains的使用

    from selenium.webdriver.common.action_chains import ActionChains

    使用步骤:

    1.实例化 ActionChains
    2.通过方法添加要执行的行为,可以添加多个,并且可以链式添加,这一步是保存要执行的行为,并不会执行。例如
    3.调用 Actionchains 对象的 perform() 执行上一步添加的行为

    from selenium.webdriver import Chrome
    import traceback
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    
    # 通过指定chromedriver的路径来实例化driver对象
    driver = Chrome(executable_path='./chromedriver')
    
    # 控制浏览器访问url地址
    # file://{本地文件绝对路径}
    driver.get('file:///home/python/code/unit_testing/selenium_code/test.html')  # 打开本地 html 文件
    
    # 实例化 ActionChains 对象
    actions = ActionChains(driver)
    
    try:
    
        # 找到输入框元素
        input_el = driver.find_element_by_id('username')
    
        # 鼠标移动到表单元素上-->执行点击-->按下shift-->按下 a -->松开 shift-->松开 a
        # 相当于给输入框驶入一个字母 Aa
        actions.move_to_element(input_el).click().key_down(Keys.SHIFT).key_down('a').key_up(Keys.SHIFT).key_up('a')
        # 执行行为链
        actions.perform()
        time.sleep(2)
    
    except Exception:
        print(traceback.format_exc())
    finally:
        # 退出浏览器
        driver.quit()
    

    方法参考

    • reset_actions(self) : 清空行为链
    • click(self, on_element=None): 鼠标点击
    • click_and_hold(self, on_element=None) : 鼠标按下
    • release(self, on_element=None) : 松开鼠标
    • context_click(self, on_element=None) : 鼠标右击
    • double_click(self, on_element=None) : 鼠标双击
    • drag_and_drop(self, source, target) : 拖动元素,source 被拖动元素,target 表示被拖动到那个元素中
    • drag_and_drop_by_offset(self, source, xoffset, yoffset) : 拖动元素,给定x,y 轴偏移
    • key_down(self, value, element=None) : 按键按下
    • key_up(self, value, element=None) : 按键松开
    • move_by_offset(self, xoffset, yoffset) : 鼠标箭头移动,给定 x,y 轴偏移
    • move_to_element(self, to_element) : 鼠标移动到某个元素中心
    • move_to_element_with_offset(self, to_element, xoffset, yoffset) : 鼠标移动到元素内的 x,y 轴位置
    • send_keys(self, *keys_to_send): 发送多个按键,也可以是一个字符串
    • send_keys_to_element(self, element, *keys_to_send) :

    相关文章

      网友评论

          本文标题:web自动化-selenium(二)

          本文链接:https://www.haomeiwen.com/subject/tywklrtx.html