Selenium 环境配置好之后,我们就可以使用 Selenium 来操作浏览器,做一些我们想做的事情了。在我们爬取网页过程中,经常发现我们想要获得的数据并不能简单的通过解析 HTML 代码获取,这些数据是通过 AJAX 异步加载方式或经过 JS 渲染后才呈现在页面上显示出来。这种情况下我们就可以使用 Selenium 来模拟浏览器浏览页面,进而解决 JavaScript 渲染的问题。
浏览器设置
打开浏览器
我们用最简洁的代码来打开 Chrome 浏览器,并访问 http://www.baidu.com 这个网站:
from selenium import webdriver# 声明浏览器对象driver = webdriver.Chrome()# 访问页面driver.get("http://www.baidu.com")
我们可以看到桌面会弹出一个浏览器窗口,并打开了百度的首页,如下图:
注意红框圈住的部分,这表示这个窗口是我们程序打开的,现在浏览器的控制权在我们的程序中,我们可以用代码让浏览器摆出各种姿势了!
设置浏览器参数
为了避免每次运行程序都打开一个窗口,我们也可以设置无窗口访问,只需添加浏览器参数即可:
from selenium import webdriver# 设置无窗口chrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--headless')# 声明浏览器对象driver = webdriver.Chrome(options=chrome_options)# 访问页面driver.get("http://www.baidu.com")
常见的浏览器参数还有:
# 启动就最大化--start-maximized# 指定用户文件夹 User Data 路径,可以把书签这样的用户数据保存在系统分区以外的分区–-user-data-dir=”[PATH]”# 指定缓存Cache路径–-disk-cache-dir=”[PATH]“# 指定Cache大小,单位Byte–-disk-cache-size=100# 隐身模式启动–-incognito# 禁用Javascript–-disable-javascript# 禁止加载所有插件,可以增加速度--disable-plugins# 禁用JavaScript--disable-javascript# 禁用弹出拦截--disable-popup-blocking# 禁用插件--disable-plugins# 禁用图像--disable-images
还有其他好多参数,具体可参见 https://peter.sh/experiments/chromium-command-line-switches/ ,该网站罗列了所有的参数。
设置代理
设置代理很简单,只需要添加一个浏览器参数就行:
chrome_options.add_argument('--proxy-server=http://{ip}:{port}')
在参数里面加上代理的 IP 和端口号。
获取页面元素
获取单个元素
selenium 查找元素有两种方法:第一种是指定使用哪种方法去查找元素,比如指定 CSS 选择器或者根据 xpath 去查找;另一种是直接使用 find_element() ,传入的第一个参数为需要使用的元素查找方法,第二个参数为查找值。来看下例:
from selenium import webdriverfrom selenium.webdriver.common.b