美文网首页
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