python selenium 百度文库_【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("https://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("https://zhidao.baidu.com") #访问百度知道

'''后退到百度首页'''

browser.back()

'''前进到百度知道'''

browser.forward()

browser.get("https://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("https://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("https://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("https://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采集百度文库

关于如何采集百度文库的讨论详见:https://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("https://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闯公众号:流量贩子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值