Selenium是一个用于Web应用程序测试的工具。

Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Firefox,Safari,Chrome,Opera等。

这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。

而用在爬虫上则是模拟正常用户访问网页并获取数据。

这里记录Selenium2的基础知识。

Pre

安装chromedriver && selenium 库

一个简单的实例:

打开百度首页,在输入框中输入python,点击搜索

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

# 打开一个Chrome浏览器
browser = webdriver.Chrome()
# 请求百度首页
browser.get('https://www.baidu.com')
# 找到输入框位置
input = WebDriverWait(browser, 10).until(
EC.presence_of_element_located((By.XPATH, '//*[@id="kw"]'))
)
# 在输入框中输入Python
input.send_keys('Python')
# 找到输入按钮
button = WebDriverWait(browser, 10).until(
EC.element_to_be_clickable(
(By.XPATH, '//*[@id="su"]'))
)
# 点击一次输入按钮
button.click()
browser.quit()

Chrome启动选项

Selenium中使用不同的Webdriver可能会有不一样的方法,有些相同的操作会得到不一样的结果,这里记录的是Chrome()的使用方法。

Chrome Options

一个Chrome的参数对象,在此对象中使用add_argument()方法可以添加启动参数,添加完毕后可以在初始化Webdriver对象时将此Options对象传入,则可以实现以特定参数启动Chrome。

例:

1
2
3
4
5
6
7
8
9
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 实例化一个启动参数对象
chrome_options = Options()
# 添加启动参数
chrome_options.add_argument('--window-size=1366,768')
# 将参数对象传入Chrome,则启动了一个设置了窗口大小的Chrome
browser = webdriver.Chrome(chrome_options=chrome_options)

常用启动参数:

启动参数 作用
–user-agent=”” 设置请求头的User-Agent
–window-size=1366,768 设置浏览器分辨率
–headless 无界面运行
–start-maximized 最大化运行
–incognito 隐身模式
–disable-javascript 禁用javascript
–disable-infobars 禁用浏览器正在被自动化程序控制的提示

https://peter.sh/experiments/chromium-command-line-switches/

禁用图片加载

1
2
3
4
5
6
prefs = {
'profile.default_content_setting_values' : {
'images' : 2
}
}
options.add_experimental_option('prefs',prefs)

禁用浏览器弹窗

使用浏览器时常常会有弹窗弹出,以下选项可以禁止弹窗:

1
2
3
4
5
6
prefs = {  
'profile.default_content_setting_values' : {
'notifications' : 2
}
}
options.add_experimental_option('prefs',prefs)

Chrome WebDriver

指定chromedriver.exe的位置

chromedriver.exe一般可以放在环境文件中,但是有时候为了方便部署项目,或者为了容易打包,我们可以将chromedriver.exe放到我们的项目目录中,然后在初始化Chrome Webdriver对象时,传入chromedriver.exe的路径。

1
2
from selenium import webdriver
browser = webdriver.Chrome(executable_path='chromedriver.exe')

Remote Webdriver

selenium.webdriver.remote.webdriver.WebDriver 这个类其实是所有其他Webdriver的父类,例如Chrome WebdriverFirefox Webdriver都是继承自这个类。这个类中实现了每个Webdriver间相通的方法。

常用方法