selenium

http://www.seleniumhq.org/

Selenium 自动化浏览器

WebDriver

ChromeDriver - WebDriver for Chrome

方式一: 指定 /path/to/chromedriver

from selenium import webdriver

path = "/Users/xxx/Downloads/chromedriver"

browser = webdriver.Chrome(path)
browser.get("http://www.baidu.com")
print(browser.page_source)
browser.close()

方式二: Start the ChromeDriver server

先运行 chromedriver

capabilities = webdriver.DesiredCapabilities.CHROME.copy()
# capabilities['platform'] = "MAC"
# capabilities['version'] = "10.12"
browser = webdriver.Remote(command_executor="http://127.0.0.1:9515", desired_capabilities=capabilities)
browser.get("http://www.baidu.com")
print(browser.page_source)

headless

无头浏览器 PhantomJS, NightmareJS等等

最新版本 selenium 不再支持 PhantomJS

Chrome推出了headless mode

可以利用

  • ES2017
  • ServiceWork(PWA测试随便耍)
  • 无沙盒环境
  • 无痛通讯&API调用
  • 无与伦比的速度

使用 selenium 的 webdrive 驱动 headless chrome

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")
# chrome_options.add_argument('--disable-gpu')

driver = webdriver.Chrome(driver_path, options=chrome_options)

利用Xvfb方式实现伪 headless chrome

当浏览器不支持headless模式,可以利用python 的Xvfb实现伪 headless mode,Xvfb只是产生了一个虚拟窗口,浏览器只是没有在当前窗口显示.

示例

from selenium import webdriver
from xvfbwrapper import Xvfb

xvfb = Xvfb(width=1280,height=720)
xvfb.start()
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
cookies = driver.get_cookies()
print(cookies)
driver.close()
xvfb.stop()