<注意>iframe框架

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

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

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

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

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

 #coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com/")
#获得当前窗口%
nowhandle=driver.current_window_handle
#打开注册新窗口
driver.find_element_by_link_text(u"京公网安备11000002000001号").click()
#获得所有窗口%
allhandles=driver.window_handles
#循环判断窗口是否为当前窗口
for handle in allhandles:
if handle != nowhandle:
driver.switch_to_window(handle)
print('now news window!')
#切换到邮箱注册标签
#driver.find_element_by_id("mailRegTab").click()
time.sleep(5)
driver.close()
#回到原先的窗口
driver.switch_to_window(nowhandle)
print('now baidu window!')
#driver.find_element_by_id("kw").send_keys(u"注册成功!")
time.sleep(3)
print('the end!')
driver.quit()

三、遮罩

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

四、下拉框处理

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

例子:

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

五、分页处理

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

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

六、上传文件

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

七、下载文件

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

八、调用JS

九、cookie处理

cookie是什么?

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

【Python虫师】多窗口定位的更多相关文章

  1. 原生JS和JQ窗口定位属性对照表

    位置 javascript jquery 兼容性 窗口位置离屏幕左偏移 var leftPos = (typeof window.screenLeft == "number") ? ...

  2. python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐(二)

    在上一篇blog:python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐 中介绍了python中的tkinter的一些东西,你可能对tkinter有一定的了解了.这篇b ...

  3. appium+python自动化50-生成定位对象模板templet(jinja2)

    前言 每次自己写pageobject定位元素对象太繁琐,格式都差不多,只是换个定位方法,这种就可以才有模板的方式,批量生成pageobject定位元素对象的模板 python里面生成模板有两个模块可以 ...

  4. python+selenium 元素被定位到而且click()也提示执行成功,但是页面就是没有变化和跳转。

    python+selenium 元素被定位到而且click()也提示执行成功,但是页面就是没有变化和跳转. 如果多次定位和click(),有时候会跳转. 我遇到很多次就是很郁闷,有人说,操作太快的,页 ...

  5. Python win32gui调用窗口到最前面

    Python win32gui调用窗口到最前面 0要写一个轮询几个重要页面的程序,不停的在大屏上进行刷新,通过pywin32模块下的SetForegroundWindow函数调用时,会出现error: ...

  6. Selenium2+python自动化13-多窗口、句柄(handle)

    前言 有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了.获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了. 本篇以打开百 ...

  7. selenium python 一些操作和定位收集

    (—)滚动条操作 python中selenium操作下拉滚动条方法汇总 selenium_webdriver(python)控制浏览器滚动条 selenium+Python(select定位) Sel ...

  8. Selenium2+python自动化13-多窗口、句柄(handle)【转载】

    前言 有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了.获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了. 一.认识多窗 ...

  9. python 图片滑动窗口

    METHOD #1: No smooth, just scaling. def pyramid(image, scale=1.5, minSize=(30, 30)): # yield the ori ...

随机推荐

  1. C# Serializable对象序列化的作用

    http://www.cnblogs.com/linlf03/archive/2011/11/03/2234424.html 1.序列化定义:将对象转换为容易传输的格式的过程.例如,可以序列化一个对象 ...

  2. ViewBag对象的更改

    JSSDKObj = new JSSDKModel(); JSSDKObj.title = "初始名称"; ViewBag.JSSDK = JSSDKObj;//初始设置ViewB ...

  3. linux下删除大量小文件

    当目录下文件太多时,用rm删除文件会报错:-bash: /bin/rm: Argument list too long提示文件数目太多.解决的办法是使用如下命令:ls | xargs -n 10 rm ...

  4. C++ 操作符new和delete

    参考资料: http://en.cppreference.com/w/cpp/memory/new/operator_new http://en.cppreference.com/w/cpp/memo ...

  5. Android与互联网的交互方式有三种

    数据下载:下载网络上的的数据,包括图片.代码文本.XML文件.JSON数据,音/视频等大文件,调用webservice. 数据上传:上传图片.文本.XML.JSON数据.音/视频文件,调用webser ...

  6. 【咸鱼教程】Egret中可长按复制的文本(例如复制优惠码)

    一 实际效果二 实现原理三 源码下载 在egret中实现长按复制文本效果,一般用于复制优惠码什么的. 一 实际效果         二 实现原理 在egret的游戏元素都是绘制在canvas上的,我们 ...

  7. linux系统中关于shell变量$*与$@的区别

    在我们初学linux系统shell时,可能会感觉$@与$*没什么区别,如下面shell脚本: #!/bin/bash# name:a.sh # echo 'this script $* is: '$* ...

  8. 【BZOJ3328】PYXFIB 数论+矩阵乘法

    [BZOJ3328]PYXFIB Description Input 第一行一个正整数,表示数据组数据 ,接下来T行每行三个正整数N,K,P Output T行,每行输出一个整数,表示结果 Sampl ...

  9. jmeter函数助手之time函数实操

    在一个接口测试中,需要提交的请求中要带时间,在看完jmeter帮忙文档,正好总结一下 1.需求 在一个XML请求中请求数据要带有时间,如下 "><ID>/lte/pdeta ...

  10. Django---路由如何配置

    具体配置在项目配置文件夹下的 urls.py: from index import views urlpatterns = [ path('admin/', admin.site.urls), pat ...