zoukankan      html  css  js  c++  java
  • 【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:Scriptsmany_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看看是否有登录信息。

  • 相关阅读:
    Python中如何取字典中的键值
    Python中random模块的用法案例
    Python中模块import的使用案例
    Python中模块的定义及案例
    Python中from … import …语句
    Python中模块调用说明
    Python中模块、类、函数、实例调用案例
    Python中读写文件三部曲
    Python中特殊函数__str__()
    Python--网络编程-----基于UDP协议的套接字不会发生粘包
  • 原文地址:https://www.cnblogs.com/zhuzhubaoya/p/7082360.html
Copyright © 2011-2022 走看看