安装:
1、需要安装selenium,只需要在终端中输入 pip install selenium (推荐使用anaconda创建python环境,谁用谁知道。)
2、下载chromedriver。
下载地址:http://chromedriver.storage.googleapis.com/index.html
chromedriver与chrome对应版本查看方法:点击任意版本,查看notes.txt,可查看到版本对应关系,如:
----------ChromeDriver v2.39 (2018-05-30)----------
Supports Chrome v66-68
一定要确认自己的chromedriver版本和chrome浏览器版本对应上,否则会出现各种神奇的错误。
3、安装方法。
windows下解压到你设定的目录即可。
接下来详细讲解linux下安装,我安装的linux机器为centos7版本,centos6请最好选择升级到7,不要在6挣扎了,全是眼泪。
正式安装步骤:
1、安装chrome。
yum install epel-release
yum install libappindicator-gtk3
yum localinstall google-chrome-stable_current_x86_64.rpm
执行 google-chrome-stable --no-sandbox --headless --disable-gpu --screenshot https://www.baidu.com/
即可看到当前目录下有一个百度网页的截图,说明安装完成。(本人迁移过三次机器,都用的这套命令没有出现过问题,如果有遇到其他问题,欢迎贴出来)
执行 /usr/bin/google-chrome -version 可以查看当前谷歌浏览器版本。
2、安装chromedriver。
将从网站上下载的chromedriver 放入/etc/bin/ 文件夹下, cd /etc/bin/
执行 ./chromedriver 无报错,安装成功,执行 ln -s /etc/bin/chromedriver /usr/bin/chromedriver 创建软连接。即可在终端直接输入 chromedriver 即可运行chromedriver。
3、在python中执行测试代码。
vim tmp.py
写入:
#coding:utf-8
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('headless')
driver = webdriver.Chrome(chrome_options=options)
url = 'http://www.baidu.com'
driver.get(url)
print(driver.page_source)
driver.close()
driver.quit()
运行 python tmp.py 输出百度网页的源码,表示安装成功。
基础功能:
from selenium import webdriver #导入需要的包
options = webdriver.ChromeOptions() #在options 中可添加其他配置属性 如添加header头,添加代理等。
options.add_argument('--no-sandbox') #以 no sandbox方式启动
options.add_argument('headless') #headless模式启动
options.add_argument('--proxy-server=http://ip:port') #添加代理IP
driver = webdriver.Chrome(chrome_options=options) #创建一个driver对象,后续通过这个driver实现对浏览器的操作。
driver.get("https://www.baidu.com") #打开百度
driver.page_source #获取源码 driver其他基本功能请自行百度或谷歌
接下来内容请在学会基本操作后观看(高级功能版,,,,,又名踩坑简介):
窗口句柄操作:
当需要切换多个网页时,可以使用:
#获取句柄
handles = driver.window_handles #返回一个句柄列表 脚标从0开始
#切换页面 driver.switch_to.window(handles[1]) #切换到新页面 #执行完操作需切换回主页面,不会自动切换
driver.switch_to.window(handles[0]) #ps 不重新获取句柄,页面句柄位置不变
select选择框操作:
from selenium.webdriver.support.select import Select #首先导入select的包
#select 选择框 指定选择
pr = driver.find_element_by_xpath(xxx)
Select(pr).select_by_index(index) #位置选择
Select(pr).select_by_value(value) #value选择
Select(pr).select_by_visible_text(text) #文本内容选择
#反选(取消选择,一般用不到)
deselect_by_index(index)
deselect_by_value(value)
deselect_by_visible_text(text)
deselect_all()
#其他返回selete选择框内容
Select(pr).options ——提供所有的选项的列表
Select(pr).all_selected_options ——提供所有被选中的选项的列表
Select(pr).first_selected_option ——提供第一个被选中的选项
目前,写到这,长期更新---
ps:补,第一坑:
当网页加载缓慢,但有时需要的内容已经加载完成时,我们需要给程序设定超时时间,当超时后强制停止浏览器。目前百度谷歌等给出的解决办法都是
driver.set_page_load_timeout(10)
driver.set_script_timeout(10)
之后捕获超时的异常然后执行js
try:
pass
except:
driver.execute_script('window.stop()')
driver.find............ #执行其他动作会发现异常捕获有时会失败,有时js语句执行成功但是再调用 driver的其他方法会报错,大家可以用下面方法解决
解决办法(此方法适用于长期稳定运行的程序,并及时释放chromedriver进程,减少内存浪费):
driver_is_ok= True #增加一个标识
try:
driver.get(url=url)
except:
try:
driver.execute_script('window.stop()')
except:
driver_is_ok= False
if driver_is_ok:
pass #执行需要的操作
else:
try:
driver.close #退出当前标签页
driver.quit #退出浏览器
except:
pass