在上一篇章,我们介绍了如何通过selenium打开首页。这一章,我们将介绍如何访问头条中每一个链接。
上一章讲到,我们获取了驱动器driver,并用driver访问了首页。
接下来,需要通过HTML的DOM结构获取到新闻列表的根节点。在讲如何获取根节点之前,我们先简单介绍一下网页的显示原理。
- 网页是由浏览器生成,生成网页内容的来源有三部分:HTML提供的网页结构、Javascript提供的动态网页结构、数据内容。
- 浏览器生成的DOM结构是一个树形的结构,每一个节点代表网页的一个元素,这个元素有标签、属性、值三部分组成。 标签定义了这个节点的类型,比如按钮、文字、超链接、图片、视频等;属性定义了元素的各种特性,比如高度、宽度、颜色、边框等等;值定了元素的内容。
- JavaScript提供了树形结构中某一部分节点的动态生成功能,用于用户与网页交互过程动态的显示不同的网页内容,例如点击下拉框显示下拉列表,选择省份显示省份的所有城市等。JavaScript提供的网页结构与HTML提供的网页结构并没有多少不同,可以理解为功能的增强。
回到我们的例子上,网页都是由DOM组成的树型结构,Selenium提供一个方法,可以依据节点的标签、属性来查找DOM上的节点,这个方法的名字叫findElement。所以访问网页的问题转换成了找到网页上节点的标签和属性。浏览器提供了这样的方法,网上也有很多相关工具,直接用今日头条app上方的搜索框输入“网页节点定位”就可以找到,头条搜索真的很强大,很方便,内容丰富,更快更全。如下:
我们查看主页的DOM节点如下:
在上图可以看到,列表的根节点标签为div,class属性值为feed-infinite-wrapper;因此可以用div.feed-infinite-wrapper找到这个节点。
下面的代码显示了如何获取列表的根节点,然后逐个获取每一个链接:
执行程序,输出结果如下: