【Python虫师】多窗口定位
<注意>iframe框架
iframe也称作嵌入式框架,嵌入式框架和框架网页类似,它可以把一个网页的框架和内容嵌入在现有的网页中。
框架(framework)是一个基本概念上的结构,用于去解决或者处理复杂的问题。这个广泛的定义使用的十分流行,尤其在软件概念。框架也能用于机械结构。
一、弹出窗口定位:弹出的窗口采用二次定位的方法定位窗口中元素
1 #coding=utf-8 2 from selenium importwebdriver3 importtime4 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 importwebdriver3 importtime4 driver =webdriver.Chrome()5 driver.get("http://www.baidu.com/")6 #获得当前窗口% 7 nowhandle=driver.current_window_handle8 #打开注册新窗口 9 driver.find_element_by_link_text(u"京公网安备11000002000001号").click()10 #获得所有窗口% 11 allhandles=driver.window_handles12 #循环判断窗口是否为当前窗口 13 for handle inallhandles: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 importwebdriver3 from selenium.webdriver.common.action_chains importActionChains4 from time importsleep5 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 importwebdriver3 importos,time4 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_t3 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 inpages:10 page.click()11 sleep(2)
六、上传文件
1 #coding=utf-8 2 from selenium importwebdriver3 importos,time4 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 importos3 from selenium importwebdriver4 from selenium.webdriver.common.action_chains importActionChains5 from time importsleep6 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看看是否有登录信息。
转载于:https://www.cnblogs.com/zhuzhubaoya/p/7082360.html
【Python虫师】多窗口定位相关推荐
- 手把手带你学python自动化测试(六)——多层窗口定位
多层框架定位 在 web 的自劢化测试工作中,通常会碰到一个元素无法定位的问题,检查了徆多次, 依然得丌到解决,此时就需要了解下 html 的 frame 框架了, frame 可以实现一个窗口 中显 ...
- Python selenium根据class定位页面元素,xpath定位
Python selenium根据class定位页面元素 在日常的网页源码中,我们基于元素的id去定位是最万无一失的,id在单个页面中是不会重复的.但是实际工作中,很多前端开发人员并未给每个元素都编写 ...
- 如何打开python的交互窗口-Python多版本情况下四种快速进入交互式命令行的操作技巧...
原标题:Python多版本情况下四种快速进入交互式命令行的操作技巧 因为工作需求或者学习需要等原因,部分小伙伴的电脑中同时安装了Python2和Python3,相信在Python多版本的切换中常常会遇 ...
- python selenium定位元素方法,python + selenium 练习篇 - 定位元素的方法
1.利用ID定位元素(能直接通过ID来定位的元素比较少) # coding=utf-8 from selenium import webdriver driver = webdriver.Chrome ...
- python弹出窗口 闪烁_Python。得到闪烁/闪烁的窗口
首先,大多数程序通过调用^{}(或包装它的高级函数)来刷新窗口.但是,有一些应用程序主要来自微软,他们做一些定制的东西,在终端用户看来就像是在闪窗,但在封面下看起来可能不一样.希望你不在乎任何这样的定 ...
- python2中文输出代码_解决vscode python print 输出窗口中文乱码的问题
解决vscode python print 输出窗口中文乱码的问题 发布时间:2020-09-17 23:53:25 来源:脚本之家 阅读:119 一.搭建 python 环境 在 VSC 中点击 F ...
- Python笔记-pyautogui 图片定位
Python笔记-pyautogui 图片定位 import os import time import pyautogui pyautogui.PAUSE = 1def im_click():try ...
- 如何打开python的终端窗口,python程序窗口怎么打开
python软件如何开启 谷歌人工智能写作项目:小发猫 python怎么打开一个终端窗口 如何进入python交互界面 Python交互模式有两种:图形化的交互模式或者命令行的交互模式.打开步骤:首先 ...
- Python tkinter多窗口的交互问题:子窗口无法获取数据
Python tkinter多窗口的交互问题:子窗口无法获取数据 tkinter第二个.第三个子窗口数据不能交互响应的解决方法 先说结论:第二个.第三个子窗口生成时,不能用tk.Tk(),而应改为tk ...
最新文章
- 云从科技完成B+轮超10亿元融资,多个国家基金进入
- 比尔盖茨NEJM发文:新冠肺炎是百年一遇的流行病!全世界应该如何应对?
- 好好说一说室内定位技术
- 一类SG函数递推性质的深入分析——2018ACM陕西邀请赛H题
- 10W字!推荐一个牛逼的人工智能笔记教程!全部整理好了(附下载)!
- 云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin
- 软件质量保证与测试(什么是图灵测试)
- java中的堆和栈_实例理解Java中的堆和栈
- python语言要多久_怎么自学python,大概要多久?
- register 寄存器变量
- 苹果手机密码锁如何解锁
- Spring工作原理
- BIM技术优秀论文14篇
- vue连线 插件_使用jsPlumb插件实现动态连线功能
- autoCAD 向图形中添加文字
- 算法时间复杂度符号分析(O、o、Ω、ω、Θ)
- 华为智慧屏鸿蒙评测,搭载鸿蒙系统的荣耀智慧屏值得入手吗?荣耀智慧屏全面评测...
- 安卓手机可以连接斑马系统吗_安卓手机与carplay互联,安卓手机怎么连carplay
- java学习笔记————SSH
- 【转】MyEclipse8优化设置