一.引导
selenium(浏览器自动化测试框架)本身提供了许多元素定位的方法,find_element_by_id()这些方法底层是用python语言实现的,提取速度上会慢一些。通常情况下,使用phantomjs/selenium也只是获取js渲染后的网页源代码,而网页中数据的提取,还可以使用xpath, css, re, bs4, etree, pyquery等。
网页中通过js渲染的数据,爬虫的解决办法:
1. 去静态源码中查找<script>var infolist = {'name':'123', }</script>(即script标签的内容)
2. 抓包或者网络请求中,查看是否有类似与json的get请求,直接请求这个json的API拿到数据
3. 使用phantomjs/selenium进行访问动态页面,而静态页面仍然使用requests进行获取
别忘了在使用selenium之前要装上相应的浏览器驱动呦!
1.geckodriver.exe: 是selenium用来打开火狐浏览器的驱动,需要将它和python.exe放在一起。
2.chromedriver.exe:是selenium用来打开谷歌浏览器的驱动,需要将它和python.exe放在一起。
注意!!!
不兼容会出现启动错误
1. geckodriver.exe的版本必须和火狐浏览器的版本兼容;
2. geckodriver.exe的版本必须和当前操作系统兼容;
二.简单举例
利用selenium实现在百度中搜索selenium,代码如下:
-
import time
-
from selenium import webdriver
-
# 创建一个火狐浏览器对象,会打开一个浏览器窗口
-
driver = webdriver.Firefox()
-
# 创建一个谷歌浏览器对象,会打开一个浏览器窗口
-
# driver = webdriver.Chrome()
- # 打开一个网页,如百度
-
driver.get('https://www.baidu.com')
-
# 通过id定位到输入框
-
keyword = driver.find_element_by_id('kw')
-
print(type(keyword))
-
# <class 'selenium.webdriver.firefox.webelement.FirefoxWebElement'>
-
-
# # 在向输入框中输入内容之前,可以先将之前的旧内容清空
-
keyword.clear()
-
-
# # 向输入框中输入内容send_keys
-
keyword.send_keys('selenium')
-
-
# # 通过class定位到搜索按钮
-
search_btn = driver.find_element_by_class_name( 's_btn')
-
-
# # 点击search_btn
-
search_btn.click()
-
time.sleep( 3)
-
driver.find_element_by_css_selector( '.result > h3 > a').click()
-
time.sleep( 3)
-
# 休眠2秒,将浏览器driver对象退出
-
driver.close()
-