【Python虫师】多窗口定位
<注意>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虫师】多窗口定位的更多相关文章
- 原生JS和JQ窗口定位属性对照表
位置 javascript jquery 兼容性 窗口位置离屏幕左偏移 var leftPos = (typeof window.screenLeft == "number") ? ...
- python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐(二)
在上一篇blog:python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐 中介绍了python中的tkinter的一些东西,你可能对tkinter有一定的了解了.这篇b ...
- appium+python自动化50-生成定位对象模板templet(jinja2)
前言 每次自己写pageobject定位元素对象太繁琐,格式都差不多,只是换个定位方法,这种就可以才有模板的方式,批量生成pageobject定位元素对象的模板 python里面生成模板有两个模块可以 ...
- python+selenium 元素被定位到而且click()也提示执行成功,但是页面就是没有变化和跳转。
python+selenium 元素被定位到而且click()也提示执行成功,但是页面就是没有变化和跳转. 如果多次定位和click(),有时候会跳转. 我遇到很多次就是很郁闷,有人说,操作太快的,页 ...
- Python win32gui调用窗口到最前面
Python win32gui调用窗口到最前面 0要写一个轮询几个重要页面的程序,不停的在大屏上进行刷新,通过pywin32模块下的SetForegroundWindow函数调用时,会出现error: ...
- Selenium2+python自动化13-多窗口、句柄(handle)
前言 有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了.获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了. 本篇以打开百 ...
- selenium python 一些操作和定位收集
(—)滚动条操作 python中selenium操作下拉滚动条方法汇总 selenium_webdriver(python)控制浏览器滚动条 selenium+Python(select定位) Sel ...
- Selenium2+python自动化13-多窗口、句柄(handle)【转载】
前言 有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了.获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了. 一.认识多窗 ...
- python 图片滑动窗口
METHOD #1: No smooth, just scaling. def pyramid(image, scale=1.5, minSize=(30, 30)): # yield the ori ...
随机推荐
- mybatis 之resultType="HashMap" parameterType="list"
<!-- 查询商品仓库信息 --> <select id="loadGoodsStock" resultType="HashMap" para ...
- Windows下POSIX线程编程(pThread)环境搭建
系统: Windows 编辑器:codeblocks13.12 1. 简介: Windows有一个叫 POSIX Threads for Win32 的开源项目给出了一个功能比较完善的Windows下 ...
- Word 2010 制作文档结构之图标自动编号设置
注意: 使用图片自动编号时,如果文档标题使用的样式是通过“将所选内容保存为新快速样式”所生成的样式,则图片自动编号不会生效 因此设置标题样式时,不要 新建样式,直接使用word预设的“标题 1”样式和 ...
- IMAP命令与分析
https://www.cnblogs.com/crystalray/p/3304688.html Internet Mail Access Protocol(缩写为IMAP,以前称作交互邮件访问协议 ...
- tar解压包的时候出现错误 gzip: stdin: not in gzip format
在Linux环境下,通过tar -zxvf 命令解压文件时遇到”gzip: stdin: not in gzip format“等错误:如图所示 root@cmfchina:/usr/java# ta ...
- 开发常见错误之 : IMP-00058: 遇到 ORACLE 错误 1691
IMP-00058: 遇到 Oracle 错误 1691ORA-01691: Lob 段YQPRO.SYS_LOB0000031467C00006$$无法通过128(在表空间YQPRO中)扩展这种情况 ...
- Oracle相关内容整理
一.常用sql 1.查看版本 SELECT * FROM V$VERSION; SELECT version FROM V$INSTANCE 2.数据库发生死锁时,跟踪文件的位置 关于跟踪文件,大义是 ...
- PS-CC常用快捷键总结
灵活使用photoshop软件快捷键是学好该软件的基础,ps快捷键对于ps平时操作有很大帮助 熟练掌握ps的快捷键可以为了处理图片节省很多时间.现在笔者将自己平时常用的快捷键总结如下: 移动工具[V] ...
- 【转】RTMP/RTP/RTSP/RTCP协议对比与区别介绍
用一句简单的话总结:RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步. 之所以以前对这几个有点分不清,是因为CTC标准里没有对RTCP进行要求,因此在标准RTSP的代码 ...
- CodeFrist、ModelFirst、DatabaseFirst
一.CodeFirst 使用System.Data.Entity.DbContext与System.Data.Entity.DbSet构建的数据模型,没有可视化文件但只有实体类的称为CodeFirst ...