selenium
- 基于浏览器自动化的一个模块;
- 便捷的获取网站中动态加载的数据;
- 便捷实现模拟登录;
一、selenium安装
- 安装:pip install --user selenium
二、selenium各浏览器驱动下载
- 使用:把驱动文件存放在python根目录下,例如:C:\Python38\下
1、Chrome浏览器驱动Driver下载:http://npm.taobao.org/mirrors/chromedriver/
from selenium import webdriver
#启动浏览器
driver = webdriver.Chrome()
2、Firefox浏览器驱动Driver下载:https://github.com/mozilla/geckodriver/releases/
from selenium import webdriver
#启动浏览器
driver = webdriver.Firefox()
3、IE浏览器驱动Driver下载:http://selenium-release.storage.googleapis.com/index.html
注意:IE浏览器的Internet选项中,安全页的4个安全选项,Internet、本地Internet、受信任的站点、受限制的站点,启用保护模式,都需要勾选上;
from selenium import webdriver
# 启动浏览器
driver = webdriver.Ie()
4、Microsoft Edge (EdgeHTML)浏览器驱动Driver下载:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
from selenium import webdriver
# 启动浏览器
driver = webdriver.Edge()
5、Opera浏览器驱动Driver下载:https://github.com/operasoftware/operachromiumdriver/releases
from selenium import webdriver
# 启动浏览器
driver = webdriver.Opera()
6、Safari浏览器驱动Driver下载:该浏览器不用下载驱动,可以直接执行代码
from selenium import webdriver
# 启动浏览器
driver = webdriver.Safari()
三、selenium使用
1、浏览器常用操作
- 启动chrome浏览器,bro = webdriver.Chrome()
- 打开网页,bro.get(url)
- 最大化浏览器,bro.maximize_window()
- 等待定位的元素出现:
- 1)隐式等待2秒,bro.implicitly_wait(2),webdriver 提供的一个超时等待,等待一个元素被发现,或一个命令完成,如果超出了设置的时间,则抛出异常;
- 2)显示等待10秒,WebDriverWait(),在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到,则抛出异常。
- 2.1> 等待元素出现:element = WebDriverWait(bro, 10).until(lambda x: x.find_element_by_id("kw"))
- 2.2> 等待元素消失:is_disappeared = WebDriverWait(bro, 10, 1, ).until_not(lambda x: x.find_element_by_id("denglu").is_displayed())
- 默认检测频率为0.5s,默认抛出异常为:NoSuchElementException
- 3)强制等待2秒,sleep(2) python的time包中的sleep()方法
- 获取当前页面的源码,page_text = bro.page_source
- 使用字符串查找关键字;
- 使用etree的xpath解析;
- 获取当前页面的url,bro.current_url
- 退出浏览器,bro.quit()
- 关闭当前标签页,bro.close()
显示等待WebDriverWait()
- 一旦页面上某些js无法加载出来(其实界面元素已经出来了),左上角那个图标一直转圈,这时候会一直等待的,所以可以使用显示等待来解决等待时间过长的问题。
- WebDriverWait(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)
- 入参driver,浏览器的一个实例,如传入bro,bro = webdriver.Chrome()
- 入参timeout,超时的总时长;
- 入参poll_frequency,循环去查询的间隙时间,默认0.5秒;
- 入参ignored_exceptions,默认的忽略报错异常NoSuchElementException
- 经常使用场景:
- 直到元素出现,结束等待;
- 直到元素消失,结束等待;
1)