基于go的selenium使用详解
文章目录
基于golang的selenium使用详解
什么是selenium?我理解成:selenium是一种程序员使用地、自动化地、可以通过代码来操控指定浏览器的一种集成工具。在使用go语言colly框架爬取需要登录的网站时,遇到了问题,我必须输入并提交账号密码(colly这个还做不出来),才能访问网站后面的资源。在网上百度了许久,于是看到了selenium可以做自动化地控制浏览器操作,于是乎便学习了基于go语言实现的selenium->第三方框架:tebeka/selenium。刚开始学习地时候搜索大量教程,也去官网逛了一圈,觉得这些教程都不是很好,大多只是贴源码,没有更为详尽地解说,于是乎,自己便将自己的学习分享出来。
selenium使用
安装
目前我正在使用的一个依赖库是 tebeka/selenium,功能较完整且处于维护中。
|
|
另外,我们需要对应不同类型的浏览器进行安装 WebDriver,Google Chrome 需要安装 ChromeDriver,Firefox 则需要安装 geckodriver。
使用实例(chorme为例)
|
|
使用css选择器,需要熟悉其语法规则。达到定位的目的。之后就是使用WebElement对应的方法实现业务逻辑处理ok了。
陷阱
注意:在使用css选择器的同时一定不能使用右键检查查看源代码,这样的源代码是已经经过js渲染的的最终源代码;而查看网页源代码则是服务器发送到浏览器的原封不动的源代码,不包括页面动态渲染的内容。所以,使用css选择器应该使用查看网页源代码。
css选择器
| 选择器 | 例子 | 例子描述 |
|---|---|---|
| .class | .intro |
选择 class="intro" 的所有元素。 |
| #id | #firstname |
选择 id="firstname" 的所有元素。 |
| * | * |
选择所有元素。 |
| element | p |
选择所有 <p> 元素。 |
| element,element | div,p |
选择所有 <div> 元素和所有 <p> 元素。 |
| element element | div p |
选择<div>元素内部的所有<p>元素。 |
| element>element | div>p |
选择父元素为 <div> 元素的所有 <p> 元素。 |
| element+element | div+p |
选择紧接在 <div> 元素之后的所有 <p> 元素。 |
| [attribute] | [target] |
选择带有 target 属性所有元素。 |
| [attribute=value] | [target=_blank] |
选择 target="_blank" 的所有元素。 |
| [attribute~=value] | [title~=flower] |
选择title属性包含单词 "flower" 的所有元素。 |
| element1~element2 | p~ul |
选择前面有 <p> 元素的每个 <ul> 元素。 |
| [attribute^=value] | a[src^="https"] |
选择其 src 属性值以 "https" 开头的每个 <a> 元素。 |
| [attribute$=value] | a[src$=".pdf"] |
选择其 src 属性以 ".pdf" 结尾的所有<a>元素。 |
| [attribute*=value] | a[src*="abc"] |
选择其 src 属性中包含 "abc" 子串的每个<a>元素。 |
| :first-of-type | p:first-of-type |
选择属于其父元素的首个 <p> 元素的每个 <p> 元素。 |
| :last-of-type | p:last-of-type |
选择属于其父元素的最后 <p> 元素的每个 <p> 元素。 |
| :only-of-type | p:only-of-type |
选择属于其父元素唯一的<p>元素的每个<p>元素。 |
| :only-child | p:only-child |
选择属于其父元素的唯一子元素的每个<p>元素。 |
| :nth-child(n) | p:nth-child(2) |
选择属于其父元素的第二个子元素的每个 <p> 元素。 |
| :nth-last-child(n) | p:nth-last-child(2) |
同上,从最后一个子元素开始计数。 |
| :nth-of-type(n) | p:nth-of-type(2) |
选择属于其父元素第二个 <p> 元素的每个<p>元素。 |
| :nth-last-of-type(n) | p:nth-last-of-type( |
同上,但是从最后一个子元素开始计数。 |
| :last-child | p:last-child |
选择属于其父元素最后一个子元素每个 <p> 元素。 |
| :root | :root |
选择文档的根元素。 |
| :empty | p:empty |
选择没有子元素的每个 <p> 元素(包括文本节点)。 |
| :not(selector) | :not(p) |
选择非<p>元素的每个元素。 |
webElement接口
|
|
源码如上,可见这个webElement封装了一些操作特定元素的一些方法,可以达到自动化操作浏览器的目的,如清除元素,填充元素。。。
文章作者 cold-bin
上次更新 2023-01-09