爬虫之Selenium 动态渲染页面爬取
Selenim 是一个自动化测试工具,可以利用它驱动浏览器执行特定的动作,如点击、下拉等操作,同时可以获取浏览器当前呈现的页面的源代码,做到可见及可爬
1.使用流程
1)声明浏览器对象
Selenium 支持非常多的浏览器,如Chrome、Firefox、Edge等,还有Android、BlackBerry等手机端浏览器。
2)访问页面
可以通过get()方法来请求网页,参数传入链接URL即可。
3)查找节点
Selenium 可以驱动浏览器完成各种操作,比如填充表单、模拟点击等。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
如要获取多个节点,element改为elements
4)节点交互
Selenium可以驱动浏览器来执行一血操作,也就是说可以让浏览器模拟执行一些动作。比较常见的用法有:输入文字时用send_keys()方法,清空文字时用clear()方法,点击按钮时用click()方法
更多操作可见 http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement
5)动作链
鼠标拖曳、键盘按键等
ActionChains http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains
6)执行JavaScript
调用execute_script()方法即可,传入参数为js方法
7)获取节点信息
获取属性 .get_attribute()
获取文本值 .get_text()
获取id、位置、标签名和大小
.id .location .tag_name .size
8)切换Frame
switch_to.frame()
Selenium打开页面后,默认在父级Frame中进行操作,如果页面中存在子Frame,则不能获取到子Frame中的节点
9)延时等待
隐式等待
如果Sekenium没有在DOM中找到节点,将继续等待,超出设定时间后,则抛出找不到节点的异常。
.implicitly_wait()
显式等待
指定要找到的节点,然后指定一个最长等待时间。如果在规定时间内加载出来了这个节点,就返回查找的节点;如果到了规定时间依然没有加载出该节点,则抛出异常
WebDriverWait().until(expected_conditions.presence_of_element_located(()))
10)Cookies
使用Selenium,可以方便地对Cookies进行操作
.get_cookies() 获取cookie
.add_cookie() 添加cookie
.dele_all_cookies() 删除所有cookie