Selenium 执行自定义的脚本来模拟界面操作

Selenium 的 WebDriver 接口很简单,主要是查找定位 WebElement,而 WebElement 接口也很简单,主要是进一步定位子元素,以及输入、点击、读取各类属性等。那么更多的操作呢?比如鼠标的滑动,元素的拖动等等?WebDriver 上的执行脚本的方法是适应各种各样的入口。通过该方法来执行 JavaScript 代码来直接调用DOM API执行各种操作。

页面下拉加载更多内容

driver.execute_script('window.scrollBy(deltaX, deltaY)')
driver.execute_script('window.scrollTo(x, y)')

frame中的条款文档下拉到底表示已经阅读

driver.execute_script('window.frames[0].scrollBy(deltaX, deltaY)')

Continue Reading

Selenium 等待页面内的脚本执行完

最近几天使用 Selenium 做浏览器自动化时,遇到了一个由脚本等待引起的问题。这个页面展示了一个类似于“请阅读条款”的内容,而且会等待一段时间点击确认按钮才会跳转到下一个页面,如果等待的时间不够,点击确认按钮后会再次显示这个页面。这里不提这个页面功能的设计是否合理,针对该页面的情况,我们该如何处理?在Selenium中打开该页面以后,代码应该等待一段时间,然后再去点击按钮。该“等待”不是查找页面元素时的超时等待 (WebDriverWait),而是在代码中sleep一段时间。

import time

time.sleep(60)
button_element = WebDriverWait(driver, 20).until(lambda the_driver: the_driver.find_element((By.NAME, 'button-name')))

代码很简单,正确处理这个问题的关键在于要充分理解页面的功能。

Continue Reading

在 RHEL 7 上安装 Selenium Python 环境

本文介绍在RHEL上安装 Selenium Python环境,执行无图形界面的浏览器自动化任务。

虚拟的图形界面 xvfb 或 xvnc

Linux 环境下使用虚拟的显示来运行普通版本的Firefox 或 chrome 浏览器。网上一般会推荐使用 xvfb (X virtual framebuffer),比如:

  1. http://scraping.pro/use-headless-firefox-scraping-linux/
  2. https://stackoverflow.com/questions/10060417/python-firefox-headless
  3. http://tobyho.com/2015/01/09/headless-browser-testing-xvfb/

在 RHEL 6中,可以下载到xvfb。但是在 RHEL 7中,已经不能下载到该包,可能是合并到了其他包中了。由于RHEL 6中的 firefox 及更底层的软件包对于 Selenium …

Continue Reading