0x01 初始化:
dcap = dict(DesiredCapabilities.PHANTOMJS) #一些属性的设置
dcap["phantomjs.page.settings.loadImages"] = False #为了速度不加载图片信息,这个根据需要使用
obj = webdriver.PhantomJS(desired_capabilities=dcap, service_args=['--ssl-protocol=any ']) #--ssl-protocol=any 可以处理https请求
#phantomjs安装路径设置为环境变量,不需要指定executable_path,否则需要指定路径:
self.obj = webdriver.PhantomJS(executable_path='C:\Anaconda3\envs\python2\phantomjs.exe',
desired_capabilities=self.dcap,
service_args=['--ssl-protocol=any '])
obj.set_window_size(1920, 1080) #设置页面尺寸
obj.switch_to.frame(0) #切换frame (有时候在一个页面上找不到这个控件,可能因为是不在一个frame下)
0x02 隐式等待implicitly_wait
obj.implicitly_wait(30)
obj.set_page_load_timeout(30)
obj.set_script_timeout(30)
隐式等待只需要设置一次,影响范围是全局的,每次driver找不到元素时,最大的等待时间为这里设置的值,超时会抛出异常。
0x03 显示等待WebDriverWait(driver,time).until(EC.method(特征)):
使用方法如下所示:
#EC:expected condition
userName = WebDriverWait(self.obj, 30).until(
EC.presence_of_element_located((By.ID, 'login-username'))
)
常用方法有:
EC.presence_of_element_located(By.ID,'verification-code-field') #通过元素ID名称查找
EC.presence_of_element_located(By.XPATH,'//*[@id="verification-code-field"]') #通过xpath表达式查找
EC.title_is('yahoo') #判断页面title是否跳转
EC.title_contains('yahoo ') #判断页面title是否包含某字符串
xpath可以直接chrome浏览器F12,对控件右键copy xpath获取
0x04 控件常用属性
userName = obj.find_element_by_xpath('//*[@id="login-username"]')
userName.send_keys('username***')
nextStep =obj.find_element_by_xpath('//*[@id="login-signin"]')
nextStop.click()
tag = obj.find_element_by_xpath('//*[@id="j-dynamicMobile-code"]')
tag.get_attribute('style') #获取html标签中style属性的值display: none; <div id = "j-dynamicMobile-code" style=display: none; ></div>
code_click = obj.find_element_by_xpath( '//*[@id="j-msg-verifyCode"]')
code_click.text #获取html标签中的text值text123456 <div id = "j-msg-verifyCode" >text123456</div>
0x05 页面常用属性
obj.title #获取页面title
obj.get_cookies() #获取cookies,list格式
obj.save_screenshot('1.png') #截屏
obj.current_url #当前页面url
obj.execute_script(js) #执行js脚本
其中get_cookies()获取的cookies格式如下:
[{u'domain': u'****
.com', u'name': u'YM.NEO_120471291574672572', u'expires': u'\u5468\u4e8c, 10 \u56db\u6708 2018 01:24:35 GMT', u'value': u'width=400&height=300', u'expiry': 1523323475, u'path': u'/', u'httponly': False, u'secure': False},
{u'domain': u'****
.com', u'name': u'AO', u'expires': u'\u5468\u516d, 09 \u4e00\u6708 2038 21:35:44 GMT', u'value': u'u=1', u'expiry': 2146685744, u'path': u'/', u'httponly': False, u'secure': False},
{u'domain': u'****
.com', u'name': u'SSL', u'expires': u'\u5468\u56db, 10 \u4e00\u6708 2019 13:20:15 GMT', u'value': u'v=1&s=JRss2by53Dp_UyAgHAnKtQ7WbHyBKh2YVVPNqJTMZ47CbXzGGr3PFR.8LSZjSyfcRnuxeBpqhUlQAACFV4LD8A--&kv=0&ku=ca.60NUxQ6IC9KaLQ5hR1YPMAduovCmJxi0Q2VkWPntcZTYU1SkzPN7nOc1uSxAIaqd.6mkNItze8BTfcbK0PiRX9c21QXWzx7b_lrq6iVQsrwhkVKvavdeX.oZZmr9xL0ichLzj18.HdSCvu3zBAuukYUb.VnVWxpYXsUZiAfc-~A', u'expiry': 1547126415, u'path': u'/', u'httponly': True, u'secure': True},
{u'domain': u'****
.com', u'name': u'Y', u'expires': u'\u5468\u56db, 10 \u4e00\u6708 2019 13:20:15 GMT', u'value': u'v=1&n=6p3rcmrtjkpr7&l=woe7pfn55vx38s3n6ab8nxgwpwha7fwxgvfxbcpf/o&p=o2rvvcn00000000&r=11k&lg=en-US&intl=us', u'expiry': 1547126415, u'path': u'/', u'httponly': False, u'secure': False},
{u'domain': u'****
.com', u'name': u'PH', u'expires': u'\u5468\u56db, 10 \u4e00\u6708 2019 13:20:15 GMT', u'value': u'fn=NYKBW_gBAPLJS0KnfA--&l=en-US&i=us', u'expiry': 1547126415, u'path': u'/', u'httponly': False, u'secure': False},
{u'domain': u'****
.com', u'name': u'F', u'expires': u'\u5468\u56db, 10 \u4e00\u6708 2019 13:20:15 GMT', u'value': u'd=Lph4flc9vLx42LHbzw2xpg6w1hwE02jYICiygdAC8MqZdQ--', u'expiry': 1547126415, u'path': u'/', u'httponly': True, u'secure': False},
{u'domain': u'****
.com', u'name': u'T', u'expires': u'\u5468\u56db, 10 \u4e00\u6708 2019 13:20:15 GMT', u'value': u'z=2pWVaB299ZaBRjRRa42/gO4MzUxMQY2NTczMDY1TjYyMDMxMD&a=QAE&sk=DAAIpmMzwKlcVe&ks=EAAz5.zbUZKYh8EJPb3NzxJDw--~G&kt=EAA44rjxv3eEkIzNGQZb_woVw--~I&ku=FAACZjNX655IPazEVYcTxc3MzzP1A1xQOZaKRBCAs.e2rx.Hr6DJJMlxFQ5nFK.xn55VIs9Jg9kCH4Wu6lR8tH3j4iiKUoAcJNvqbOYaWkAOpIYOD5og0Q74ZwJTrVN3i8BxcXBEp.OSmDN9nZyzQ_j3Ryi5_SCc1Uu83mz25_Ys9U-~A&d=bnMBeWFob28BZwE0QjJXVEFJRDZUV1c0Wk9GNkE3S1ZQTUpESQFzbAFOREkyTmdFeE1qQTBOekV5T1RFMU56UTJOekkxTnpJLQFhAVFBRQFhYwFBQkpHbVZlYwFhbAF0b21va28xMjM0NTY3OAFzYwFkZXNrdG9wX3dlYgFmcwFZX05zbUF4YVZXcDIBenoBMnBXVmFCQTdF&af=JnRzPTE1MTU1NDcyNTQmcHM9UE8wTHBSV281dE9YT01tYUdsWXIwQS0t', u'expiry': 1547126415, u'path': u'/', u'httponly': True, u'secure': True},
{u'domain': u'****
.com', u'name': u'B', u'expires': u'\u5468\u56db, 10 \u4e00\u6708 2019 13:20:15 GMT', u'value': u'2phekgdd5aqij&b=4&d=q5ScCIJpYFT.w1RzSOBSzDA_xpI-&s=c2&i=fbvNBhmwO6muMVqEznua', u'expiry': 1547126415, u'path': u'/', u'httponly': False, u'secure': False}
]
转换成dict格式的方法:
cookie_list =obj.get_cookies()
print cookie_list
cookie_dict = {}
for cookie in cookie_list:
cookie_dict[cookie['name']] = cookie['value']
return cookie_dict
- selenium + phantomjs 爬取落网音乐
题记: 作为一个业余程序猿,最大的爱好就是电影和音乐了,听音乐当然要来点有档次的.落网的音乐的逼格有点高,一听听了10年.学习python一久了,于是想用python技术把落网的音乐爬下来随便听. 目 ...
- 使用selenium+phantomJS实现网页爬取
有些网站反爬虫技术设计的非常好,很难采用WebClient等技术进行网页信息爬取,这时可以考虑采用selenium+phantomJS模拟浏览器(其实是真实的浏览器)的方式进行信息爬取.之前一直使用的 ...
- Selenium + PhantomJS + python 简单实现爬虫的功能
Selenium 一.简介 selenium是一个用于Web应用自动化程序测试的工具,测试直接运行在浏览器中,就像真正的用户在操作一样 selenium2支持通过驱动真实浏览器(FirfoxDrive ...
- 数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置
数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置 2013-05-15 15:08:14 分类: Python/Ruby 数据抓取是一门艺术,和其他软件不同,世界上 ...
- 动态网页爬取例子(WebCollector+selenium+phantomjs)
目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test" ...
- python+selenium自动化软件测试(第6章):selenium phantomjs页面解析使用
我们都知道Selenium是一个Web的自动化测试工具,可以在多平台下操作多种浏览器进行各种动作,比如运行浏览器,访问页面,点击按钮,提交表单,浏览器窗口调整,鼠标右键和拖放动作,下拉框和对话框处理等 ...
- 学习用java基于webMagic+selenium+phantomjs实现爬虫Demo爬取淘宝搜索页面
由于业务需要,老大要我研究一下爬虫. 团队的技术栈以java为主,并且我的主语言是Java,研究时间不到一周.基于以上原因固放弃python,选择java为语言来进行开发.等之后有时间再尝试pytho ...
- 利用Selenium+PhantomJS 实现截图
using OpenQA.Selenium; using OpenQA.Selenium.PhantomJS; using System; using System.Drawing; using Sy ...
- python selenium+phantomjs alert()弹窗报错
问题:用selenium+phantomjs 模拟登陆,网页用JavaScript的alert("登陆成功")弹出框,但是用switch_to_alert().accept()报错 ...
随机推荐
- sqlserver创建和删除外键约束
x先找出约束名字然后删除它我给个例子 --测试环境--主表create table test1(id int primary key not null,value int)insert test1 s ...
- 论文阅读笔记(七)【TIP2018】:Video-Based Person Re-Identification by Simultaneously Learning Intra-Video and Inter-Video Distance Metrics
是由一篇 IJCAI2016 扩的期刊. 该篇会议论文的阅读笔记[传送门] 期刊扩充的部分:P-SI2DL 1.问题描述: 在会议论文中介绍的SI2DL方法采用了视频三元组作为视频关系(是否匹配)的逻 ...
- JSP+Servlet开发物流管理系统 源码
开发环境: Windows操作系统开发工具:Myeclipse+Jdk+Tomcat+MYSQL数据库 运行效果图:
- 性能优化-css,js的加载与执行
前端性能优化 css,js的加载与执行 javascript是单线程的 一个网站在浏览器是如何进行渲染的呢? html页面加载渲染的过程 html渲染过程的一些特点 顺序执行,并发加载 词法分析 并发 ...
- [tensorflow] tf.gather使用方法
tf.gather:用一个一维的索引数组,将张量中对应索引的向量提取出来 import tensorflow as tf a = tf.Variable([[1,2,3,4,5], [6,7,8,9, ...
- 洛谷P1308 统计单词数
原题链接:https://www.luogu.org/problem/P1308 #include<iostream> #include<cstring> #include&l ...
- 第70届(2019)IMO中国国家队选拔考试试题
(几何除外)1,几何,略2,给定n≥3,是否存在无穷个2n元集{a1,...,an,b1,...,bn}满足其中元素整体互素,a1,...,an成等差数列,b1,...,bn也成等差数列.3,给定k, ...
- 申请一个美国paypal账户
近期为了做PayPal支付,进口demo已经写好,就差一个美国PayPal账户进行支付测试,几经折腾,终于申请下来,附上参考链接: paypal官网: https://www.paypal.com ...
- [HNOI2004] L语言 - AC自动机,dp
给定字典和没有标点的文章,求能够被识别的最长前缀. 显然不能贪心,设\(f[i]\)表示前\(i\)个字符构成的前缀能否被识别,然后在AC自动机上暴力转移即可. 具体来说,每走到一个新位置,就沿着fa ...
- dataTables插件的使用
用到dataTables这个插件还是因为Metronic这个框架里有用到,不然我不会选择它的,为啥呢?就感觉它的文档有点复杂(当然,也有我智商不够用的原因):既然用了,那就说说我遇到的问题吧,以防下次 ...