0
点赞
收藏
分享

微信扫一扫

基于OpenCV的人脸对齐步骤详解及源码实现

左小米z 2023-07-02 阅读 70
selenium

目录

Actions接口

Action构造器

暂停

释放所有Actions

键盘操作

按键

按下按键

释放按键​​​​​​​

键入

活跃元素​​​​​​​​​​​​​​

指定元素​​​​​​​​​​​​​​

复制粘贴

鼠标操作

单击并按住

单击并释放

交替单击按钮

上下文单击

点击后退

点击前进

双击

移到元素

按偏移量移动

与元素的偏移

与视口的偏移

与当前指针位置的偏移

在元素上拖放

按偏移拖放

滚轮动作

滚动到元素

按给定数量滚动

从一个元素滚动给定的量

从具有偏移的元素滚动

从原点(元素)的偏移量滚动给定的量


Actions接口

用于向 Web 浏览器提供虚拟化设备输入操作的低级接口.

除了高级元素交互之外, Actions 接口 还提供了对指定输入设备 可以执行的确切操作的精细控制. Selenium为3种输入源提供了接口: 键盘设备的键输入, 鼠标, 笔或触摸设备的输入, 以及滚轮设备的滚轮输入 (在Selenium 4.2中引入). Selenium允许您构建分配给特定输入的独立操作命令, 会将他们链接在一起, 并调用关联的执行方法以一次执行它们.

Action构造器

在从遗留JSON Wire协议迁移到 新的W3C WebDriver协议的过程中, 低级的操作构建块变得特别详细. 它非常强大, 但每个输入设备都有多种使用方法, 如果您需要管理多个设备, 则负责确保他们之间的同步正确.

值得庆幸的是, 您可能不需要学习如何直接使用低级命令, 因为您可能要执行的几乎所有操作, 都已提供了相应的简便方法, 这些方法可以为您组合较低级别的命令. 请分别参阅相应的键盘, 鼠标, 笔 和滚轮 页面.

暂停

指针移动和滚轮滚动 允许用户设置操作的持续时间, 但有时您只需要在操作之间等待一下, 即可正常工作.

    clickable = driver.find_element(By.ID, "clickable")
    ActionChains(driver)\
        .move_to_element(clickable)\
        .pause(1)\
        .click_and_hold()\
        .pause(1)\
        .send_keys("abc")\
        .perform()

释放所有Actions

需要注意的重要一点是, 驱动程序会记住整个会话中所有输入项的状态. 即使创建actions类的新实例, 按下的键和指针的位置 也将处于以前执行的操作离开它们的任何状态.

有一种特殊的方法来释放所有当前按下的键和指针按钮. 此方法在每种语言中的实现方式不同, 因为它不会使用perform方法执行.

    ActionBuilder(driver).clear_actions()

键盘操作

一种适用于任何与网页交互的按键输入设备的表现形式.

只有 2 个操作可以使用键盘完成: 按下某个键,以及释放一个按下的键. 除了支持 ASCII 字符外,每个键盘按键还具有 可以按特定顺序按下或释放的表现形式.

按键

除了由常规unicode表示的按键, 其他键盘按键被分配了一些unicode值以用于操作Selenium 每种语言都有自己的方式来援引这些按键; 这里 可以找到完整列表

 Python Keys class

按下按键

    ActionChains(driver)\
        .key_down(Keys.SHIFT)\
        .send_keys("abc")\
        .perform()

释放按键​​​​​​​​​​​​​​

    ActionChains(driver)\
        .key_down(Keys.SHIFT)\
        .send_keys("a")\
        .key_up(Keys.SHIFT)\
        .send_keys("b")\
        .perform()

键入

这是Actions API的一种便捷方法, 它将 keyDown 和 keyUp 命令组合在一个操作中. 执行此命令与使用 element 方法略有不同, 但这主要用于,需要在其他操作之间键入多个字符时使用.

活跃元素​​​​​​​​​​​​​​

    ActionChains(driver)\
        .send_keys("abc")\
        .perform()

指定元素​​​​​​​​​​​​​​

    text_input = driver.find_element(By.ID, "textInput")
    ActionChains(driver)\
        .send_keys_to_element(text_input, "abc")\
        .perform()

复制粘贴

下面是使用上述所有方法执行复制/粘贴操作的示例. 请注意, 用于此操作的键位会有所不同, 具体取决于它是否是 Mac OS. 此代码将以文本收尾: SeleniumSelenium!​​​​​​​​​​​​​​

    cmd_ctrl = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL

    ActionChains(driver)\
        .send_keys("Selenium!")\
        .send_keys(Keys.ARROW_LEFT)\
        .key_down(Keys.SHIFT)\
        .send_keys(Keys.ARROW_UP)\
        .key_up(Keys.SHIFT)\
        .key_down(cmd_ctrl)\
        .send_keys("xvv")\
        .key_up(cmd_ctrl)\
        .perform()

鼠标操作

用于与网页交互的任何指针设备的表示。

鼠标只能完成3个动作:按下按钮、释放按下的按钮和移动鼠标。Selenium提供了方便的方法,这些方法以最常见的方式结合了这些操作。

单击并按住

此方法将鼠标移动到元素的中心与按下鼠标左键相结合。这对于聚焦特定元素非常有用:​​​​​​​​​​​​​​

    clickable = driver.find_element(By.ID, "clickable")
    ActionChains(driver)\
        .click_and_hold(clickable)\
        .perform()

单击并释放

此方法将移动到元素的中心与按住并释放鼠标左键相结合。这也被称为“点击”:​​​​​​​​​​​​​

    clickable = driver.find_element(By.ID, "click")
    ActionChains(driver)\
        .click(clickable)\
        .perform()

交替单击按钮

鼠标总共有5个定义的按钮:
0-左键(默认)
1-中间按钮(当前不支持)
2-右按钮
3-X1(后退)按钮
4-X2(前进)按钮

上下文单击

此方法将移动到元素的中心与按下和释放鼠标右键(按钮2)相结合。这也被称为“右键单击”:​​​​​​​

    clickable = driver.find_element(By.ID, "clickable")
    ActionChains(driver)\
        .context_click(clickable)\
        .perform()

点击后退

没有方便的方法,只是按下并释放鼠标按钮3​​​​​​​​​​​​​​

Selenium v4.2

    action = ActionBuilder(driver)
    action.pointer_action.pointer_down(MouseButton.BACK)
    action.pointer_action.pointer_up(MouseButton.BACK)
    action.perform()

点击前进

没有方便的方法,只是按下并释放鼠标按钮4​​​​​​​​​​​​​​

​​​​​​​Selenium v4.2

    action = ActionBuilder(driver)
    action.pointer_action.pointer_down(MouseButton.FORWARD)
    action.pointer_action.pointer_up(MouseButton.FORWARD)
    action.perform()

双击

此方法将移动到元素的中心与按下并释放鼠标左键两次相结合。​​​​​​​

    clickable = driver.find_element(By.ID, "clickable")
    ActionChains(driver)\
        .double_click(clickable)\
        .perform()

移到元素

此方法将鼠标移动到元素的视图中心点。这也被称为“悬停”。请注意,元素必须在视口中,否则命令将出错。​​​​​​​

    hoverable = driver.find_element(By.ID, "hover")
    ActionChains(driver)\
        .move_to_element(hoverable)\
        .perform()

 

按偏移量移动

这些方法首先将鼠标移动到指定的原点,然后移动所提供偏移中的像素数。请注意,鼠标的位置必须在视口中,否则命令将出错。

与元素的偏移

此方法将鼠标移动到元素的视图中心点,然后按提供的偏移量移动。​​​​​​​​​​​​​​

    mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
    ActionChains(driver)\
        .move_to_element_with_offset(mouse_tracker, 8, 0)\
        .perform()

与视口的偏移

此方法将鼠标从当前视口的左上角移动所提供的偏移量。

    action = ActionBuilder(driver)
    action.pointer_action.move_to_location(8, 0)
    action.perform()

与当前指针位置的偏移

此方法将鼠标从其当前位置移动用户提供的偏移量。如果以前没有移动过鼠标,则该位置将位于视口的左上角。请注意,当页面滚动时,指针位置不会改变。
请注意,第一个参数X指定在为正时向右移动,而第二个参数Y指定在为负时向下移动。因此,moveByOffset(30,-10)从当前鼠标位置向右移动30,向上移动10。

    ActionChains(driver)\
        .move_by_offset( 13, 15)\
        .perform()

在元素上拖放

该方法首先在源元素上单击并按住,移动到目标元素的位置,然后释放鼠标。

    draggable = driver.find_element(By.ID, "draggable")
    droppable = driver.find_element(By.ID, "droppable")
    ActionChains(driver)\
        .drag_and_drop(draggable, droppable)\
        .perform()

按偏移拖放

此方法首先在源元素上单击并按住,移动到给定的偏移量,然后释放鼠标

    draggable = driver.find_element(By.ID, "draggable")
    start = draggable.location
    finish = driver.find_element(By.ID, "droppable").location
    ActionChains(driver)\
        .drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y'])\
        .perform()

 

滚轮动作

用于与网页交互的滚轮输入设备的表示。

Selenium v4.2

Chromium Only

在一个页面上滚动有5种情况。

滚动到元素

这是最常见的情况。与传统的单击并发送关键帧方法不同,动作类不会自动将目标元素滚动到视图中,因此如果元素还不在视口中,则需要使用此方法。
此方法将web元素作为唯一参数。
无论元素是在当前视图屏幕的上方还是下方,视口都将滚动,因此元素的底部位于屏幕的底部。

    iframe = driver.find_element(By.TAG_NAME, "iframe")
    ActionChains(driver)\
        .scroll_to_element(iframe)\
        .perform()

按给定数量滚动

这是第二种最常见的滚动场景。输入一个delta x和delta y值,以确定向右和向下滚动的量。负值分别表示向左和向上。

    footer = driver.find_element(By.TAG_NAME, "footer")
    delta_y = footer.rect['y']
    ActionChains(driver)\
        .scroll_by_amount(0, delta_y)\
        .perform()

从一个元素滚动给定的量

这个场景实际上是上述两种方法的结合。
要执行此操作,请使用“Scroll From”方法,该方法需要3个参数。第一个表示原点,我们将其指定为元素,第二个表示delta x和delta y值。
如果元素在视口之外,它将滚动到屏幕底部,然后页面将按提供的delta x和delta y值滚动。

    iframe = driver.find_element(By.TAG_NAME, "iframe")
    scroll_origin = ScrollOrigin.from_element(iframe)
    ActionChains(driver)\
        .scroll_from_origin(scroll_origin, 0, 200)\
        .perform()

从具有偏移的元素滚动

当您只需要滚动屏幕的一部分,并且屏幕位于视口之外时,将使用此场景。或者在视口内,并且屏幕上必须滚动的部分与特定元素的偏移量已知。
这再次使用“Scroll From”方法,除了指定元素外,还指定了一个偏移量来指示滚动的原点。偏移是从所提供元素的中心开始计算的。
如果元素在视口之外,它将首先滚动到屏幕底部,然后通过将偏移量添加到元素中心的坐标来确定滚动的原点,最后通过提供的delta x和delta y值滚动页面。
请注意,如果与元素中心的偏移位于视口之外,则会导致异常。

    footer = driver.find_element(By.TAG_NAME, "footer")
    scroll_origin = ScrollOrigin.from_element(footer, 0, -50)
    ActionChains(driver)\
        .scroll_from_origin(scroll_origin, 0, 200)\
        .perform()

从原点(元素)的偏移量滚动给定的量

当您只需要滚动屏幕的一部分,并且屏幕已经在视口中时,将使用最后的场景。
这将再次使用“从滚动”方法,但指定的是视口而不是元素。从当前视口的左上角指定偏移。确定原点后,页面将滚动所提供的delta x和delta y值。
请注意,如果与视口左上角的偏移位于屏幕之外,则会导致异常。

    scroll_origin = ScrollOrigin.from_viewport(10, 10)

    ActionChains(driver)\
        .scroll_from_origin(scroll_origin, 0, 200)\
        .perform()
举报

相关推荐

0 条评论