web自动化-selenium(二)

2022-02-16  本文已影响0人  在下YM

浏览器常用属性和方法

属性

方法

窗口截图

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

在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 相关的方法

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 中将元素的点击和发送表单数抽象位行为链,行为链中可以包含一个以上的动过,常见行为如下:

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()

方法参考

上一篇下一篇

猜你喜欢

热点阅读