抓取动态网络数据
对于动态网页的数据可以直接使用模拟浏览器运行的方式进行实现,这样做可以不用管网页内部是如何使用javaScript渲染页面的,也不用管Ajax请求中到底有没有加密参数,在浏览中看到是什么样的内容,抓取的结果便是什么样的内容。Python中提供了许多模拟浏览器运行的库,包括Slenium、Splash、PyAytoGUI等。
-Slenium可以直接运行在浏览器中,模拟用户使用浏览器完成一些动作,包括自动加载页面、输入文本、选择下框、单击按钮、单机超链接等。不过,Selenium本身不带浏览器,它通过一个浏览器驱动程序WebDriver才能与所选浏览器进行交互。
-Solash
1.采用异步方式并处理多个网页渲染过程
2.获取渲染后面的源代码
3.通过关闭图像或使用Adblock Plus规则加快页面渲染速度。
4.可以执行特定的javaScript脚本
5.可以通过Lua脚本控制页面的渲染过程。
6.以HAR格式呈现获取渲染的详细过程。
-PyAutoGUI
1.移动鼠标并在其他应用程序的窗口中单击或键入文本。
2.想应用程序发送按键,比如填写表格。
3.截图屏幕并发送一张图像,在屏幕上找到它。
4.定位应用程序的窗口,并移动、调整大小、最大化、最小化或关闭该窗口。
WebDriver类的床用属性和方法
为模仿用户真实操作浏览器的过程,webdriver模块的WebDriber类中提供了一些执行诸如打开浏览器、关闭浏览器、页面刷新、前进、后退等入门操作的方法或属性。
定位元素
Selenium的WebDriver类中提供了定位元素的方法,这些方法元素的熟练可以分为定位单个元素个定位多个元素。
1.通过class属性定位元素
2.通过指定方式定位元素
find_element()方法是定位元素的通用方法,与其他几个方法相比,它更加灵活,可以通过参数指定定位方式。(find_element()方法中的参数by表示定位方式,该参数支持取值)
3.通过指定方式定位元素
使用find_element()方法定位豆瓣电影的评论数据中class属性值为short的元素
鼠标操作
常用的鼠标操作有双击、右击、拖拽、按住不动等,它们都封装为ActionChains类的方法。
1.单击鼠标左键
2.鼠标指针悬停
3.鼠标拖拽
下拉列表框操作
Selenium中,select类专门用于处理下拉框,该类提供了一下几个方法从下拉框中选择或者取消选项。
#select_by_index():根据索引选择下拉框中的选项,且索引是从0开始的。
#sekect_by_value():根据值选择下拉框中的选项,这里的值是<option>元素中value属性的值,而不是下拉框中选项的值。
#sekect_by_visible_text():根据文字选择下拉框的选项,这里的文字是<option>元素的文本内容。
#deselect_all():取消全部选择。
弹出框的处理
selenium中的Alert类用于处理这3类弹出框,不过在处理弹框之前需要先使用WebDriver类对象的switch_to_alert选中弹出框。
1.要想处理警告框,Selenium的Alert类提供了text属性和accept()方法,其中text属性用于获取警告框中的警告消息;accpet()方法用于单击确定按钮。
要想处理确认框,Selenium的Alert类中提供了text属性、accept()方法和dismiss()方法,其中text属性和acccept()方法与警告框中的作用相同,dismiss()方法用于单击"取消"按钮。
弹出框处理
要想处理提升框,Selenium的Alert类中提供了text属性、accept()方法、dismiss()方法和send_keys(),前三个属性或方法的作用与确认框中的作用相同,send_keys方法用于接收用户输入的内容。
页面切换
在浏览器中建议同事打开多个窗口,但每次只能显示一个窗口的页面。拖希望显示其他窗口的页面,则需要单击窗口上方的选项卡,达到页面切换的效果。
Selenium通过窗口句柄来区分浏览器的窗口,它为每个浏览器窗口分配了唯一句柄ID,通过这个句柄Id可以切换到指定页面。Selenium的WebDriver类中提供了一些操作窗口句柄的属性或方法。
window_handles:获取所有窗口的句柄ID
current_window_hanle:获取当前窗口的句柄ID
switch_to.window():跳转到指定窗口