【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看看是否有登录信息。