【Python虫师】多窗口定位

 

 

 

<注意>iframe框架

iframe也称作嵌入式框架,嵌入式框架和框架网页类似,它可以把一个网页的框架和内容嵌入在现有的网页中。

框架(framework)是一个基本概念上的结构,用于去解决或者处理复杂的问题。这个广泛的定义使用的十分流行,尤其在软件概念。框架也能用于机械结构。

一、弹出窗口定位:弹出的窗口采用二次定位的方法定位窗口中元素

 1 #coding=utf-8
 2 from selenium import webdriver
 3 import time
 4 
 5 driver = webdriver.Chrome()
 6 driver.get("http://www.baidu.com/")
 7 #点击登录链接
 8 time.sleep(3)
 9 driver.find_element_by_link_text(u"登录").click()
10 #通过二次定位找到用户名输入框
11 time.sleep(3)
12 #div=driver.find_element_by_xpath("//*[@id='TANGRAM__PSP_8__form']").find_element_by_name("userName") #第1种xpath定位方法
13 #div=driver.find_element_by_id('TANGRAM__PSP_8__form').find_element_by_name("userName") #第2种id定位方法
14 div=driver.find_element_by_id('TANGRAM__PSP_2__content').find_element_by_name("userName") #第3种id定位方法
15 #div=driver.find_element_by_class_name("tang-content").find_element_by_name("userName")
16 div.send_keys("username")
17 #输入登录密码
18 driver.find_element_by_name("password").send_keys("password")
19 #点击登录
20 driver.find_element_by_id("TANGRAM__PSP_10__submit").click()
21 driver.quit()

 

二、浏览器多窗口处理(如果第二个页面打开了新窗口,那么继续执行的操作程序不能判断是在哪个窗口引出的,所以引出多窗口打开概念)

 1 #coding=utf-8
 2 from selenium import webdriver
 3 import time
 4 driver = webdriver.Chrome()
 5 driver.get("http://www.baidu.com/")
 6 #获得当前窗口%
 7 nowhandle=driver.current_window_handle
 8 #打开注册新窗口
 9 driver.find_element_by_link_text(u"京公网安备11000002000001号").click()
10 #获得所有窗口%
11 allhandles=driver.window_handles
12 #循环判断窗口是否为当前窗口
13 for handle in allhandles:
14     if handle != nowhandle:
15         driver.switch_to_window(handle)
16         print('now news window!')
17         #切换到邮箱注册标签
18         #driver.find_element_by_id("mailRegTab").click()
19         time.sleep(5)
20         driver.close()
21 #回到原先的窗口
22 driver.switch_to_window(nowhandle)
23 print('now baidu window!')
24 #driver.find_element_by_id("kw").send_keys(u"注册成功!")
25 time.sleep(3)
26 print('the end!')
27 driver.quit()

 三、遮罩

 1 #coding=utf-8
 2 from selenium import webdriver
 3 from selenium.webdriver.common.action_chains import ActionChains
 4 from time import sleep
 5 driver = webdriver.Chrome()
 6 driver.get("http://www.baidu.com/")
 7 #点击打开搜索设置
 8 driver.find_element_by_link_text(u"设置").click()
 9 driver.find_element_by_link_text(u"搜索设置").click()
10 
11 #点击保存设置
12 sleep(3) #此处必须加休眠时间,如果不加,会失败运行
13 driver.find_element_by_class_name("prefpanelgo").click()
14 #获取网页上的警告信息
15 alert=driver.switch_to_alert()
16 #接收警告信息
17 sleep(3)
18 alert.accept()
19 driver.quit()

 四、下拉框处理

定位下拉框的时候需要用到二次定位,首先需要定位到下拉框的框框,然后再定位待选择的元素,后执行click()操作即可实现。

例子:

 1 #coding=utf-8
 2 from selenium import webdriver
 3 import os,time
 4 driver= webdriver.Firefox()
 5 file_path = 'file:///' + os.path.abspath('drop_down.html')
 6 driver.get(file_path)
 7 time.sleep(2)
 8 #先定位到下拉框
 9 m=driver.find_element_by_id("ShippingMethod")
10 #再点击下拉框下的选项
11 m.find_element_by_xpath("//option[@value='10.69']").click()
12 time.sleep(3)
13 driver.quit()

五、分页处理

 

【举例】分页下拉框形式举例

 1 #获取所有分页的数量,并打印
 2 total_pages=len(driver.find_element_by_tag_name("select").find_elements_by_t
 3 ag_name("option"))
 4 print "total page is %s" %(total_pages)
 5 sleep(3)
 6 #再次获取所分页,并执行循环翻页操作
 7 pages=driver.find_element_by_tag_name("select").find_elements_by_tag_name("o
 8 ption")
 9 for page in pages:
10 page.click()
11 sleep(2)

 六、上传文件

 

 1 #coding=utf-8
 2 from selenium import webdriver
 3 import os,time
 4 driver = webdriver.Chrome()
 5 #打开上传文件页面
 6 file_path = 'file:///' + os.path.abspath('upload_file.html') #上传页面
 7 driver.get(file_path)
 8 #定位上传按钮,添加本地文件
 9 driver.find_element_by_name("file").send_keys('D:\Scripts\many_windows-ok.py') #file为上传按钮的name,后面的为路径文件
10 time.sleep(2)
11 driver.quit()

 

七、下载文件

 1 #coding=utf-8
 2 import os
 3 from selenium import webdriver
 4 from selenium.webdriver.common.action_chains import ActionChains
 5 from time import sleep
 6 fp = webdriver.FirefoxProfile() #我们通过webdriver提供的一个火狐浏览器设置的方法把方法传递给fp
 7 fp.set_preference("browser.download.folderList",2) #通过fp中set方法找到火狐的相关设置项把设置项做修改,
 8 fp.set_preference("browser.download.manager.showWhenStarting",False)#
 9 fp.set_preference("browser.download.dir", os.getcwd()) #指定类型的属性
10 fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream") #指定路径的属性
11 browser = webdriver.Firefox(firefox_profile=fp) #获取浏览器的变量,把fp设置传递火狐的方法里,设置就ok
12 #访问待下载路径及文件
13 browser.get("http://pypi.python.org/pypi/selenium")
14 browser.find_element_by_partial_link_text("selenium-3").click()

 八、调用JS

九、cookie处理

cookie是什么?

答:cookie是程序写在浏览器中的信息,比如登录时候写在浏览器的用户名密码,然后网站下次登录就会读取cookie看看是否有登录信息。

 

posted @ 2017-06-26 20:41  猪猪宝丫  阅读(507)  评论(0编辑  收藏  举报