昊天SEO

【GOGO闯】python selenium自动化测试

selenium是自动化测试中常用的python库,直接控制浏览器来进行网页访问,与火狐浏览器的iMacros类似,但功能更多,跟python其他库结合能完成很多iMacros单独实现不了的功能。

常用功能如下:

1、切换ip点击百度关键词排名、竞价关键词
2、采集需要触发js或加密的网页,如百度文库,页面上的文字源码中根本不可见,可以用selenium来copy前端页面上的内容;如百度指数,所有数据加密,可以把对网页显示指数的部分截图到本地,在ORC识别
示例:

#coding:utf-8
 
'''导入selenium中的webdriver包,只有导入这个包才能使用webdriver api 进行自动化脚本开发'''
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from 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.title
print 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下来,但效率不高且占系统资源。

#coding:utf-8
'''采集百度文库'''
 
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from 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闯

未经允许不得转载:新乡seo|网站优化,网站建设—昊天博客 » 【GOGO闯】python selenium自动化测试

网站的维护离不开大家的支持鼓励,捐赠让我更有动力走的更远&& 也可以关注我的微信公众号,发布更多的干货
本文网址:https://www.168seo.cn/selenium/2422.html

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址