Python自动化selenium笔记

python变量:path :  c:\python 可以把浏览器驱动放在c:\python目录下
打包成可执行的EXE文件:pyinstaller -w --onefile selenium1.py  #在pycharm终端的Python文件下执行
selenium安装:Python setup.py install
cmd运行:Python  -m unittest 脚本.py
查看Python安装地址:cmd-->where python
python输入IP变成超链接,将光标移到到冒号前面
注意事项:	:
				//*[@id="queryLeftTable"]//td[4][@class]/../td[1]//a
				双//相对路径  /..返回上层路径 
				注意事项:
				1.elements后面要加s(多元素) 2."queryLeftTable" 中"符号别错了
				2.动态变化的元素,使用xpath模糊查询://*[contains(text(),"GC-高铁/城际")]
				//*[@id="_ul_station_train_code"]/li[1]/label

自己写一个弹窗:		driver.execute_script("window.alert('这是一个alert弹框。');")

元素带none,不可见时:	js = "document.getElementsByClassName(hhidden)[0].style.display='block';"
						driver.execute_script(js)
						
使用JS删除元素:		document.getElementsByClassName("site-nav-right fr")[0].childNodes[1].removeAttribute("target")	
						#调用js方法,同时执行javascript脚本
						driver.execute_script(js) 
						
时间日期控件的处理:
					①带readonly属性的使用JS去除属性,然后添加时间
					# 去掉readonly属性
					js  =   'document.getElementById("train_date").removeAttribute("readonly");'
					drive.execute_script(js)
					# js添加时间
					js_value    =   'document.getElementById("train_date").value="2019-11-10"'
					drive.execute_script(js_value)
					②不带readonly属性,可以手动写的使用send_keys()
				
note:
	浏览器操作:
				driver.maximize_window() #将浏览器最大化显示
				driver.set_window_size(480, 800) #设置浏览器宽480、高800显示
				driver.back() #后退
				driver.forward() #前进
				driver.quit() #退出浏览器
				
	定位元素:
			find_element_by_id() # 常用
			find_element_by_name() # 常用
			find_element_by_class_name() #class属性
			find_element_by_tag_name()	#标签 eg:div,from,input 最不靠谱的定位
			find_element_by_link_text() #文件链接 一般前面都会有:<a href="http://tieba.baidu.com" name="tj_tieba">贴 吧</a> 
			find_element_by_partial_link_text()	#文件链接 一般前面都会有:<a href="http://tieba.baidu.com" name="tj_tieba">贴 吧</a>
			find_element_by_xpath() #难,灵活性与定位能力强
			find_element_by_css_selector() #难,灵活性与定位能力强
			
	操作测试对象:
					clear()  #清除元素的内容
					send_keys() #在元素上模拟按键输入
					click() #单击元素 可以点击的元素,文字/图片连接,按钮,下拉按钮等
					submit() #提交表单 与click相似
					
					size  	#返回元素的尺寸 (宽,高)
					text	#获取元素的文本
					get_attribute(name)	#获得属性值 可以是 id、name、type 或元素拥有的其它任意属性
					is_displayed()  #设置该元素是否用户可见
					
	鼠标事件:		from selenium.webdriver.common.action_chains import ActionChains #引入 ActionChains 类
					context_click() #右击	eg:ActionChains(driver).context_click(right).perform() 
					double_click() #双击	eg:ActionChains(driver).double_click(double).perform()	 
					drag_and_drop() #拖动 eg:ActionChains(driver).drag_and_drop(element, target).perform() 前面有定位到底元素element=driver.find_element_by_name("xxx")
					move_to_element() #鼠标悬停在一个元素上eg:ActionChains(driver).move_to_element(above).perform() 
					click_and_hold() #按下鼠标左键在一个元素上	eg:ActionChains(driver).click_and_hold(left).perform()
					
	键盘事件:		send_keys(Keys.BACK_SPACE) #删除一个字符
					send_keys(Keys.SPACE) #输入空格键
					send_keys(Keys.CONTROL,'a')	#ctrl+a 全选输入框内容
					send_keys(Keys.CONTROL,'x')	#ctrl+x 剪切输入框内容
					send_keys(Keys.CONTROL,'v')	#粘贴(Ctrl+V)
					send_keys(Keys.ENTER)	#通过回车键盘来代替点击操作
					send_keys(Keys.TAB) #制表键(Tab)
					send_keys(Keys.ESCAPE) #回退键(Esc)
					
	打印:
					driver.title	#获得前面 title
					driver.current_url	#获得前面 URL
					
	设置等待时间:	
					sleep() #sleep()方法以秒为单位
					WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None) #eg:WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda x: x.find_element_by_id(“someId”).is_displayed())
					
	定位一组对象:
					eg:	checkboxes = driver.find_elements_by_css_selector('input[type=checkbox]')
						for checkbox in checkboxes:
							checkbox.click()
							
						checkboxes = driver.find_elements_by_css_selector('input[type=checkbox]').pop().click()
						
	多窗口:		
					driver.current_window_handle	#获得当前窗口 nowhandle
					driver.window_handles		#获得所有窗口 allhandles
					driver.switch_to_window(nowhandle)   #回到原先的窗口
					driver.close()		#关闭当前窗口
					
					判断:
						for handle in allhandles:
							if handle != nowhandle:
								driver.switch_to_window(handle)
								print 'now register window!'
	
	alert/confirm/prompt 处理:
					
						text 返回 alert/confirm/prompt 中的文字信息。
					 	accept 点击确认按钮。
					 	dismiss 点击取消按钮,如果有的话。
					 	send_keys 输入值,这个 alert\confirm 没有对话框就不能用了,不然会报错
						driver.switch_to_alert() #转换到弹窗
						
				
	文件上传:
				send_keys('D:\\selenium_use_case\upload_file.txt') #文件路径
				
	文件下载:
				browser.download.dir #用于指定你所下载文件的目录。
				os.getcwd() #该函数不需要传递参数,用于返回当前的目录。
				application/octet-stream #为内容的类型。
				
	滚动条:
				#将页面滚动条拖到底部
				js="var q=document.documentElement.scrollTop=10000"
				driver.execute_script(js)
				
				#将滚动条移动到页面的顶部
				js_="var q=document.documentElement.scrollTop=0"
				driver.execute_script(js_)
				
				# 用目标元素参考去拖动
				target_elem = driver.find_element_by_link_text("地区")
				driver.execute_script("return arguments[0].scrollIntoView();",target_elem) 
				
	cookie:		
				driver.get_cookies()  # 获得 cookie 信息
				delete_cookie("CookieName")	# 删除一个特定的 cookie
				driver.delete_all_cookies()	# 删除所有 cookie
				driver.add_cookie({'name':'key-aaaaaaa', 'value':'value-bbbb'})	#向 cookie 的 name 和 value 添加会话信息
				遍历cookie:
							for cookie in driver.get_cookies():
								print "%s -> %s" % (cookie['name'], cookie['value'])
								
	循环执行参数化:	
						values=['selenium','webdriver',u'虫师']
						
						for serch in values:
							driver = webdriver.Firefox()
							driver.get("http://www.xxxx.com")
							driver.find_element_by_id("kw").send_keys(serch)
					②	多个字段可以建造多个文本
						source = open("D:\\abc\\data.txt", "r")
						values = source.readlines()
						source.close()
						
					③	读取CSV文件
						import csv #导入 csv 包
						#读取本地 CSV 文件
						my_file='D:\\selenium_python\\data\\userinfo.csv'
						data=csv.reader(file(my_file,'rb'))
	错误截图:	找不到元素报错截图
				browser.get_screenshot_as_file("/home/fnngj/python/error_png.png") 
				eg:
					try:
						browser.find_element_by_id("kwsss").send_keys("selenium") 
						browser.find_element_by_id("su").click()
					except:
						browser.get_screenshot_as_file("/home/fnngj/python/error_png.png")
					browser.quit()
	将对象拖拽到目标地点:
						A = driver.find_element_by_id('u')
						B = driver.find_element_by_id('p')
						ActionChains(driver).drag_and_drop(A,B).perform()
						
	滑块拖拽:
					ActionChains(driver).drag_and_drop_by_offset(A,300,0).perform() #300代表X轴,0代表Y轴
					
	切入到无id,无name的iframe框架中:
										定位到frame元素,切换进去
										iframe=driver.find_element_by_xpath('//*[@id="bjui-navtab"]/div[3]/div/iframe')
										driver.switch_to_frame(iframe)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值