golang从入门到精通,搭建本地selenium自动化测试环境

Python09

golang从入门到精通,搭建本地selenium自动化测试环境,第1张

用Golang做爬虫,当面对页面存在复杂的JS的情况,使用普通的http.get或者http.post,如不做特殊处理,将无法解析页面源代码

在使用python的过程中,可以使用selenium进行爬取数据,或使用selenium自动化测试,那么用Golang怎么处理这个问题呢?

其实Golang中也有selenium,Selenium 作为一个用于 Web 应用程序测试的工具,可以模拟真实浏览器进行操作,也可以实现鼠标点击、滚轮、输入等用户日常操作。

我们通过2节课的学习,实现1、本地启动selenium服务;2、远程启动selenium服务。

1.伪装http header,我们可以使用phanomjs的API来实现:

派生到我的代码片

1. <span style="font-family:SimSunfont-size:18px">page.customHeaders = {

2. "Referer" : referrer,

3. "User-Agent" : "Mozilla/5.0 (Windows NT 6.1WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER 1.1"

4. }</span>

2.伪造referer欺骗js,这一点其实就要麻烦一些:我们需要首先打开referer页面,然后再模拟点击消息转到目的网站,具体方法如下:

1. <span style="font-family:SimSunfont-size:18px">page.onLoadFinished = function(status){

2.

3. // Only once do

4. if ( page.firstLoad ) {

5. page.firstLoad = false

6. // Inject and Click a Link to our target

7. page.evaluate(function (href) {

8. // Create and append the link

9. var link = document.createElement('a')

10. link.setAttribute('href', href)

11. document.body.appendChild(link)

12.

13. // Dispatch Click Event on the link

14. var evt = document.createEvent('MouseEvents')

15. evt.initMouseEvent('click', true, true, window, 1, 1, 1, 1, 1, false, false, false, false, 0, link)

16. link.dispatchEvent(evt)

17. }, targetUrl)

18. } else {

19.// 此处我们已经成功伪造referer信息,并且打开Target url页面

20. console.log(targetUrl+"\t"+page.url)

21.

22. }

23. }</span>

3.伪造User Agent欺骗js,这一点其实就要麻烦一些,但是我们也可以通过phantomjs的API来实现:

在CODE上查看代码片

1. <span style="font-family:SimSunfont-size:18px">page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER"</span>

4. 使用代理,这个phantomjs支持的就更好啦,调用的时候加入代理的参数即可:

派生到我的代码片

1. <span style="font-family:SimSunfont-size:18px">phantomjs --proxy=ip:port</span>

5.添加cookies(我知道phantomjs设置cookies可行,目前还没有验证,据称有以下三种方法):

page.customHeaders = {Cookie: xxx}

phantom.addCookie({

'name': 'yandexuid',

'value':'21611441383258191',

'domain': '.yandex.ru'))

})

phantomjs --cookies-file=cookies.txt

说到这里其实我们已经得到了一个动态的爬虫,它可以之行js代码,可以抓取到网页的动态内容,具有浏览器的header并且无法被js、ajax、java、php代码识别,甚至也无法被后台的日志分析识别。目前为止该方法的qps并不高,因为加载js和phantomjs并发性能不高。

其实这个爬虫有很多的用处:

1.伪造点击信息,最近CNZZ公布了中小网站的流量来源中30%是来自奇虎360的,众所周知CNZZ是植入js代码统计网站的访问量和来源的。这些完全可以用我们的代码伪造访问量,并且伪造访问来源呀。

2. 爬取网站动态内容,有很多网站是基于ajax和js设计的,现在我们就可以爬取到这些代码执行得到的数据。

3.逃避反爬虫策略,这个就太明显了。