基于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