selenium自动化测试web
来源:互联网 发布:广州天拓网络 编辑:程序博客网 时间:2024/04/28 17:49
- 爬取没有JS的网页
- 爬取有JS代码的网页
源码地址
我这里使用selenium是为了爬取网页上的信息,爬取网页上的东西我这边暂且认为有两种方式,一种是针对没有JS的网页,这种情况用普通的get请求就可以爬;另一种是有JS的网页,这种如果不使用支持JS的框架,那么拿到的只是JS代码,所以这里就可以借助selenium这种本意为自动化测试而生的框架。
爬取没有JS的网页
可以用普通的get请求,拿到数据为网页的源代码,用正则表达式去匹配我们想要的东西。
也可以借助框架BeautifulSoup来解析网页源码(XML解析)
正则表达式爬取数据
# user/bin/env python3# -*- coding:utf-8 -*-from urllib import requestimport re# get网络请求def getNetResquest(url): with request.urlopen(url) as f: data = f.read() return dataclass Spider: def __init__(self): self.siteURL = 'http://mm.taobao.com/json/request_top_list.htm' # 淘宝MM网页的URL # 获取该页的网页数据 def getPage(self, pageIndex): url = self.siteURL + "?page=" + str(pageIndex) print(url) response = getNetResquest(url) return response.decode('gbk') # 获取第几页的网页MM def getContents(self, pageIndex): page = self.getPage(pageIndex) # 获取到网页源码数据 pattern = re.compile('<div class="list-item".*?pic-word.*?<a href="(.*?)".*?<img src="(.*?)".*?<a class="lady-name.*?>(.*?)</a>.*?<strong>(.*?)</strong>.*?<span>(.*?)</span>', re.S) # 正则表达式,匹配我们想要的信息这里分别获取到MM的个人主页,头像的链接,姓名,年龄,城市 items = re.findall(pattern, page) # 用正则表达式,去匹配网页源码 for item in items: # 遍历匹配的结果,并打印出来 print(item[0], item[1], item[2], item[3], item[4]) # 分别对应MM的个人主页,头像的链接,姓名,年龄,城市spider = Spider()spider.getContents(1)
用bs4分析网页源码爬取数据
import requestsfrom bs4 import BeautifulSoupindex = 0headers = {'referer': 'http://jandan.net/', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0'}# 保存图片def save_jpg(res_url): global index html = BeautifulSoup(requests.get(res_url, headers=headers).text) # 获取网页数据,并将其转换为beautifulsoup对象 for link in html.find_all('a', {'class': 'view_img_link'}): # 从网页源码里面抓取图片的链接 with open('{}.{}'.format(index, link.get('href')[len(link.get('href'))-3: len(link.get('href'))]), 'wb') as jpg: # 抓取链接里面图片的后缀,并新建新的图片文件 jpg.write(requests.get("http:" + link.get('href')).content) # 将图片保存在本地 print("正在抓取第%s条数据" % index) index += 1# 抓取煎蛋妹子图片,默认抓取5页if __name__ == '__main__': url = 'http://jandan.net/ooxx' for i in range(0, 5): save_jpg(url) # 下载图片 url = BeautifulSoup(requests.get(url, headers=headers).text).find('a', {'class': 'previous-comment-page'}).get('href') # 获取下一页的URL
爬取有JS代码的网页
这里使用selenium框架+Chrome浏览器。
首先需要配置我们的环境变量以及下载会用到的包
pip install selenium selenium Github地址
然后下载chromedriver注意的问题是chromedriver和Chrome的版本一定要相符,一般来说都是用最新的版本是没问题的,一般chromedriver也会说明支持的Chrome版本范围,
下载完成后,将chromedriver解压后的EXE文件复制到Chrome的目录下,如果在安装Chrome时没有另选路径的一般会是下面路径(这里的C作为系统盘)
C:\Users\DAMNICOMNIPLUSVIC\AppData\Local\Google\Chrome\Application
然后把该路径下面的chromedriver添加到环境变量的path里。
win+R->右键此电脑(计算机)->属性->高级系统设置->环境变量->编辑系统变量里面的path,添加
C:\Users\DAMNICOMNIPLUSVIC\AppData\Local\Google\Chrome\Application\;
然后在DOS窗口输入chromedriver看是否有打印信息。
然后写我们的Python代码
# user/bin/env python3# -*- coding:utf-8 -*-import osimport tracebackimport requestsimport sysfrom selenium import webdriverCURRENTPATH = os.path.split(os.path.realpath(sys.argv[0]))[0] # 获取该文件的绝对路径# 根据提供的网址下载文件def downloadImageFile(imgUrl): local_filename = imgUrl.split('/')[-1] # 读取文件的名字 print("Download Image File=", local_filename) r = requests.get(imgUrl, stream=True) # here we need to set stream = True parameter os.makedirs(CURRENTPATH+'\\tuchong', exist_ok=True) # 创建一个新的文件夹 with open(CURRENTPATH+'\\tuchong\\'+local_filename, 'wb') as f: for chunk in r.iter_content(chunk_size=1024): if chunk: # filter out keep-alive new chunks f.write(chunk) f.flush() f.close() return local_filenameclass Spider: def __init__(self): self.driver = webdriver.Chrome() # 初始化这个类,这里仅仅指明了用哪个浏览器 def execute(self): self.login() # 登录图虫 self.album('3') # 去到编号为3这个人的相册 def login(self): self.driver.get('https://tuchong.com/') # 打开图虫网页 print(self.driver.title) # login = self.driver.find_element_by_link_text('登录') login = self.driver.find_element_by_xpath('/html/body/header/nav/div[2]/a[1]') # 找到图虫首页上面的登录按钮,这里采用的是xpath方式 print(login) if not login is None: # 判断找到的登录按钮是否为空 login.click() # 点击登录按钮 self.driver.switch_to.alert # 将当前driver的焦点转移到弹出的对话框 account = self.driver.find_element_by_xpath('//*[@id="login-dialog"]/div/div/div/div[1]/form/div[2]/input') # 找到输入账号的输入框 password = self.driver.find_element_by_xpath('//*[@id="login-dialog"]/div/div/div/div[1]/form/div[3]/input') # 找到输入密码的输入框 loginbtn = self.driver.find_element_by_xpath('//*[@id="login-dialog"]/div/div/div/div[1]/form/div[6]/button') # 找到登录的按钮 account.send_keys('你的图虫账号') # 输入账号 password.send_keys('你的图虫账号密码') # 输入密码 loginbtn.click() # 点击登录 self.driver.refresh() # 刷新driver,让网页本身获取焦点 print(self.driver.title) # 打印标题 def album(self, num): url = 'https://tuchong.com/%s/albums' % (str(num),) # 输入ID为num的账户的相册URL(因为上面已经登录了,所以这里不会要求重新登录) self.driver.get(url) self.driver.refresh() # 刷新driver获取当前网页的焦点 print(self.driver.title) # 打印当前网页的标题 albums = self.driver.find_elements_by_class_name('picture-wrap') # 找到用户的相册元素的集合(多个相册就有多个元素) if True: try: albums[2].click() # 这里点击第三个相册 self.driver.refresh() # 获取当前页面的driver images = self.driver.find_elements_by_class_name('post-cover') # 获取相册里面的图片集合 for image in images: # 挨个打开,图片大图(会在新的标签页打开大图) image.click() curhandle = self.driver.current_window_handle # 获取当前网页的把柄handle(网页) print('main handle:', curhandle) for handle in self.driver.window_handles: # 遍历当前浏览器打开的所有handle(网页) print('handle:', handle) if not handle == curhandle: # 遍历的handle(网页)与相册的网页handle作比较 self.driver.switch_to.window(handle) # 将driver的焦点转移到该大图网页 image = self.driver.find_element_by_class_name('copyright-contextmenu') # 找到图片所在的节点 src = image.get_attribute('src') # 从该节点里面取出图片的原地址链接 downloadImageFile(src) # 下载该图片 self.driver.close() # 关闭该网页, print(src) except: traceback.print_exc() self.driver.back() self.driver.refresh() self.driver.quit() # 所有的代码执行完,就退出这次程序if __name__ == '__main__': spider = Spider() spider.execute()
然后执行就行了。
- selenium 自动化web测试
- selenium自动化测试web
- 利用 Selenium 自动化 web 测试
- 利用 Selenium 自动化 web 测试
- 利用 Selenium 自动化 web 测试
- selenium web自动化测试工具
- Selenium+Python:Web自动化测试
- python3+selenium,web自动化测试
- web 页面自动化测试工具--selenium
- Selenium进行web端的自动化测试
- selenium web的自动化测试工具
- 关于java web自动化测试工具 selenium
- Web自动化测试工具——Selenium
- web自动化测试框架(Selenium+TestNG)
- Web测试自动化的Selenium组件
- Web自动化测试三:selenium框架搭建
- selenium——Web自动化测试工具
- Selenium+Python Web自动化测试环境搭建
- 回溯法——旅行商(TSP)问题
- 理解ARP协议以及IP与MAC地址的关系
- The Solution to Leetcode 463 Island Perimeter
- bzoj 3101: N皇后
- GC学习笔记
- selenium自动化测试web
- #421 Div.2 B. Mister B and Angle in Polygon——几何数学
- 状态模式
- 状态模式
- 【笔记】vim如何删除重复行
- 算法机考模拟题 part2
- oracle学习之例外
- Neutron的基本原理与代码实现
- jstl遍历集合