问题:
selenium模块和爬虫之间又怎样的关联?
- 便捷的获取网站中动态加载的数据(ajax)
- 便捷的实现模拟登录
Selenium测试直接运行在浏览器中,就像真正的用户在操作一样
什么是selenium?
- 基于浏览器自动化的一个模块。
selenium的使用流程:
-
环境的安装: pip install selenium
-
下载一个浏览器的驱动程序
- 下载路径http://chromedriver.storage.googleapis.com/index.html
- 驱动程序和浏览器的映射关系:
https://blog.csdn.net/huilan_same/article/details/51896672 -
实例化一个浏览器对象
-
编写基于浏览器的自动化的代码
- 发起请求: get(url)
- 标签定位:find 系列的方法
- 标签的交互:send_keys(’’)
- 执行js程序:execute_script(‘jsCode’)
- 前进和后退:back(),forward()
- 关闭浏览器:quit()
示例1:
from selenium import webdriver
from lxml import etree
from time import sleep
# 实例化一个浏览器对象(传入浏览器的驱动程序)
bro = webdriver.Chrome(executable_path='./chromedriver.exe')
# 让浏览器发起一个指定的url对应请求
bro.get('http://scxk.nmpa.gov.cn:81/xk/')
# 获取浏览器当前页面的源码数据
page_text = bro.page_source
# 解析企业名称
tree = etree.HTML(page_text)
li_list = tree.xpath('//ul[@id="gzlist"]/li')
for li in li_list:
name = li.xpath('./dl/@title')[0]
print(name)
sleep(5)
bro.quit()
实例2:
from selenium import webdriver
from time import sleep
bro = webdriver.Chrome(executable_path='./chromedriver.exe')
bro.get('https://www.taobao.com/')
# 实现标签定位
search_input = bro.find_elements_by_id('q')
# 标签交互
search_input[0].send_keys('iphone')
# 执行一组js程序
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(2)
# 点击搜索按钮
btn = bro.find_elements_by_css_selector('.btn-search')
btn[0].click()
bro.get('https://www.baidu.com')
sleep(2)
# 回退(返回按钮)
bro.back()
sleep(2)
# 前进
bro.forward()
sleep(5)
bro.quit()