python selenium自动化测试SEO常用功能
selenium是自动化测试中常用的python库,直接控制浏览器来进行网页访问,与火狐浏览器的iMacros类似,但功能更多,跟python其他库结合能完成很多iMacros单独实现不了的功能。
常用功能如下:
1、切换ip点击百度关键词排名、竞价关键词
2、采集需要触发js或加密的网页,如百度文库,页面上的文字源码中根本不可见,可以用selenium来copy前端页面上的内容;如百度指数,所有数据加密,可以把对网页显示指数的部分截图到本地,在ORC识别
示例:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
#coding:utf-8 '''导入selenium中的webdriver包,只有导入这个包才能使用webdriver api 进行自动化脚本开发'''from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.common.proxy import *import time,re '''打开firefox浏览器'''browser = webdriver.Firefox() '''向浏览器输入指定网址'''browser.get("http://www.baidu.com") '''浏览器指定宽高显示,一般用于对页面截图并保存,对测试页面的前端样式进行测评,通常用于移动端'''browser.set_window_size(480,800) '''浏览器窗口最大化'''browser.maximize_window() '''通过id=kw定位到百度输入框,并通过键盘方法send_keys()向输入框输入selenium'''browser.find_element_by_id("kw").send_keys("python") '''通过id=su定位搜索按钮,向按钮发送点击事件click() '''browser.find_element_by_id("su").click() browser.get("http://zhidao.baidu.com") #访问百度知道 '''后退到百度首页'''browser.back() '''前进到百度知道'''browser.forward() browser.get("http://www.kanzhun.com/")browser.find_element_by_xpath("/html/body/header/div/p/a[1]").click() browser.find_element_by_xpath("//*[@id=\"loginField\"]/li[1]/div/input").send_keys("username")browser.find_element_by_xpath("//*[@id=\"loginField\"]/li[2]/div/input").send_keys("password")browser.find_element_by_xpath("//*[@id=\"emailLogin\"]/p[3]/input").click() '''获得title'''title = browser.titleprint title '''刷百度关键词点击'''browser.get("http://www.baidu.com")browser.find_element_by_id("kw").send_keys(u"工资") '''超时设置,如果超过指定时间,则抛出异常'''browser.implicitly_wait(30) '''通过键盘回车来代替搜素按钮的点击操作'''browser.find_element_by_id("su").send_keys(Keys.ENTER) line_list = browser.find_elements_by_xpath("//h3[@class='t']") for line in line_list: t = line.find_element_by_xpath("a") print '%s - %s' % (t.text, type(t.text)) if u'看准网' in t.text: print 'yes' t.click()browser.quit() '''采集百度文库内容'''browser = webdriver.Firefox()browser.get("http://wenku.baidu.com/")browser.find_element_by_id("kw").send_keys(u'销售工作计划')browser.find_element_by_id("sb").send_keys(Keys.ENTER)line_list = browser.find_elements_by_xpath("//p[@class='fl']") '''获取当前窗口'''nowhandle = browser.current_window_handle for line in line_list: print line.text link = line.find_element_by_xpath("a").click() '''获取所有窗口''' allhandles=browser.window_handles '''循环判断窗口是否为当前窗口''' for handle in allhandles: if handle != nowhandle: browser.switch_to_window(handle) txt = browser.find_element_by_xpath("//*[@id=\"reader-container-inner-3\"]").text print re.sub(r'\s+','\n',txt.replace('\n','')) '''关闭当前窗口''' browser.close() '''回到原先的窗口''' browser.switch_to_window(nowhandle)browser.quit() '''切换代理'''myProxy_list = ["60.29.248.142:8080","117.136.234.9:80"] for myProxy in myProxy_list: proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy': myProxy, 'ftpProxy': myProxy, 'sslProxy': myProxy, 'noProxy': '' # set this value as desired }) browser = webdriver.Firefox(proxy=proxy) browser.get("http://www.baidu.com") browser.find_element_by_id("kw").send_keys("ip") browser.find_element_by_id("su").click() time.sleep(5) browser.quit() |
【工具】phantomjs + seleinum采集百度文库
关于如何采集百度文库的讨论详见:http://www.5118.com/discuss/topic/48
反正百度文库为了防采集已经做到了令人发指的程度,模拟spider是没有格式的,正常访问html是不包含内容的,直接请求json只包含元素定位的信息。
所以像火车头浏览器、python爬虫无法获取内容,只能用phantomjs模拟浏览器访问,再从浏览器解析过的html把相关部分的东西copy下来,但效率不高且占系统资源。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#coding:utf-8'''采集百度文库''' from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.common.proxy import *import time,re,csv csvfile = open('jihua_wenku.csv','wb') for word in open('word'): word = word.strip() '''指定phantomjs路径''' browser = webdriver.PhantomJS(executable_path='/Users/sunjian/phantomjs-2.0.0-macosx//bin/phantomjs',service_args=['--ssl-protocol=any',]) #browser.set_window_size(300,400) browser.get("http://wenku.baidu.com/") browser.find_element_by_id("kw").send_keys(word.decode('utf8')) browser.find_element_by_id("sb").send_keys(Keys.ENTER) line_list = browser.find_elements_by_xpath("//p[@class='fl']") n = 0 nowhandle = browser.current_window_handle for line in line_list: if n < 3: try: link = line.find_element_by_xpath("a").click() except: continue allhandles=browser.window_handles for handle in allhandles: if handle != nowhandle: browser.switch_to_window(handle) try: txt = browser.find_element_by_xpath("//*[@id=\"reader-container-inner-3\"]").text text = re.sub(r'\s+','\n',txt.replace('\n','')).encode('utf8') n += 1 data = [] data.append(word) data.append(text) writer = csv.writer(csvfile,dialect='excel') writer.writerow(data) print '%s,已采集第%s篇' % (word,n) except: continue browser.close() browser.switch_to_window(nowhandle) else: break browser.quit() |
GOGO闯公众号:流量贩子

浙公网安备 33010602011771号