1.Chrome和Firefox推出headless功能后,在headless浏览器这方面 phantomJS就受到了挤压,selenium后面将不再支持phantomJS了,但是作为个人项目还是可以使用的,这里记录一下,Ubuntu 18.04
平台
http://phantomjs.org/download.html //下载链接
tar -xjvf tar -xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2
sudo cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin
把解压后可执行文件拷贝到PATH搜索路径,这样后面在生成实例的时候就不用传可执行文件的路径了。
这里搬运一下selenium的API示例代码,完成利用百度自动搜索beauty girl关键字,并生成screenshot
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.PhantomJS()
driver.get("http://www.baidu.com")
print(driver.title) //获取网页的标题
//利用Chrome开发者工具查看百度输入框的name
inputElement = driver.find_element_by_name("wd")
inputElement.send_keys("beauty girl")
inputElement.submit()
try:
WebDriverWait(driver, 10).until(EC.title_contains("beauty"))
//保存查询的结果快照,虽然是headless
driver.get_screenshot_as_file("beauty-girl.png")
print(driver.title) //再次输出查询返回结果页面的标题
finally:
driver.quit()
http://chromedriver.chromium.org/getting-started //下载链接
unzip chromedriver_linux64.zip
sudo cp chromedriver /usr/local/bin //同phantomJS安装
默认下selenium通过chrome WebDriver调用Chrome是有界面的,想要headless,需要在实例化的时候送指定的参数
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
//第一种方法
options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(chrome_options=options)
//第二种方法
#chrome_options = Options()
#chrome_options.add_argument('--headless')
#driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("http://www.baidu.com")
print(driver.title)
inputElement = driver.find_element_by_name("wd")
inputElement.send_keys("beauty girl")
inputElement.submit()
try:
WebDriverWait(driver, 10).until(EC.title_contains("beauty"))
driver.get_screenshot_as_file("beauty-girl.png")
print(driver.title)
finally:
driver.quit()