TA的每日心情 | 擦汗 3 小时前 |
---|
签到天数: 1047 天 连续签到: 5 天 [LV.10]测试总司令
|
2#
楼主 |
发表于 2021-6-21 09:56:38
|
只看该作者
- import time
- from selenium import webdriver
- driver = webdriver.Chrome()
- driver.get('https://www.baidu.com/')
- time.sleep(1)
- handle_one = driver.current_window_handle
- driver.find_element_by_xpath('//*[text()="学术"]').click()
- wins = driver.window_handles
- print(wins)
复制代码 以一个列表结果显示在控制台上:
- /Users/lifeng/python-virtualenv/venv/bin/python3 /Users/lifeng/python-projects/test-python/selenium_script.py
- ['CDwindow-AF8997BAD711CC3594401F925514090B', 'CDwindow-FEDA1D318C16D669C57446ECA6296709']
- Process finished with exit code 0
复制代码 再用switch_to.window()用来获取指定窗口,也就是切换窗口
页面显示结果,获取的句柄是第一个,也就是wins[0]获取的那个句柄。
关闭窗口
当完成一个窗口并且它不是浏览器中最后一个打开的窗口时,应将其关闭并切换回以前使用的窗口。
- import time
- from selenium import webdriver
- driver = webdriver.Chrome()
- driver.get('https://www.baidu.com/')
- time.sleep(1)
- handle_one = driver.current_window_handle
- driver.find_element_by_xpath('//*[text()="学术"]').click()
- wins = driver.window_handles
- driver.switch_to.window(wins[0])
- driver.close()
复制代码 退出浏览器
完成浏览器会话后,应调用quit而不是close
- import time
- from selenium import webdriver
- driver = webdriver.Chrome()
- driver.get('https://www.baidu.com/')
- time.sleep(1)
- handle_one = driver.current_window_handle
- driver.find_element_by_xpath('//*[text()="学术"]').click()
- wins = driver.window_handles
- driver.switch_to.window(wins[1])
- time.sleep(2)
- driver.close()
- time.sleep(2)
- driver.quit()
复制代码 退出将:
1.关闭与该WebDriver会话关联的所有窗口
2.关闭浏览器进程
3.关闭后台驱动程序
我们也可以使用 try / finally ,这样出现异常仍会退出浏览器会话,finally号称流氓,也就是不管怎么样,最后都会执行 finally 。
- import time
- from selenium import webdriver
- driver = webdriver.Chrome()
- driver.get('https://www.baidu.com/')
- try:
- time.sleep(1)
- handle_one = driver.current_window_handle
- driver.find_element_by_xpath('//*[text()="学术"]').click()
- wins = driver.window_handles
- driver.switch_to.window(wins[1])
- time.sleep(2)
- driver.close()
- time.sleep(2)
- finally:
- driver.quit()
复制代码 当然现在的WebDriver也是支持python上下文管理器的,当使用with关键字时,它可以在执行结束时自动退出驱动程序。
- import time
- from selenium import webdriver
- with webdriver.Chrome() as driver:
- driver.get('https://www.baidu.com/')
- time.sleep(2)
- driver.find_element_by_xpath('//*[text()="学术"]').click()
- time.sleep(2)
复制代码 框架和内联框架(frames and Iframes)
如果是iframe框架,我们就要先进入框架再进行元素操作
- iframe = driver.find_element(By.CSS_SELECTOR, "#modal > iframe")
- driver.switch_to.frame(iframe)
- driver.find_element(By.CLASS_NAME, 'button').click()
复制代码 进入框架后,操作完成后也要记得离开框架,不然框架外的元素就无法定位了,离开框架就要使用下面的方法:
- driver.switch_to.default_content()
复制代码 获取窗口大小
获取浏览器窗口的大小(以像素为单位)
- import time
- from selenium import webdriver
- with webdriver.Chrome() as driver:
- driver.get('https://pan.baidu.com/')
- time.sleep(2)
- driver.get_window_size().get('width')
- driver.get_window_size().get('height')
复制代码 也就可以这样操作:
- import time
- from selenium import webdriver
- with webdriver.Chrome() as driver:
- driver.get('https://pan.baidu.com/')
- time.sleep(2)
- size = driver.get_window_size()
- width = size.get('width')
- height = size.get('height')
- print(f'宽:{width}, 高:{height}')
- driver.find_element_by_xpath('//*[@placeholder="手机/邮箱/用户名"]').send_keys('19999999999')
- time.sleep(2)
复制代码 把宽度和高度显示在控制台:
- /Users/lifeng/python-virtualenv/venv/bin/python3 /Users/lifeng/python-projects/test-python/selenium_script.py
- 宽:1200, 高:897
- Process finished with exit code 0
复制代码 设定窗口大小
恢复窗口并设置窗口大小
- driver.set_window_size(1024, 768)
复制代码 获取窗口位置
获取浏览器窗口左上角的坐标
- import time
- from selenium import webdriver
- with webdriver.Chrome() as driver:
- driver.get('https://pan.baidu.com/')
- time.sleep(2)
- position = driver.get_window_position()
- x = position.get('x')
- y = position.get('y')
- print(f'坐标 x:{x}, 坐标 y:{y}')
- driver.find_element_by_xpath('//*[@placeholder="手机/邮箱/用户名"]').send_keys('19999999999')
- time.sleep(2)
复制代码 也可以这样操作:
- import time
- from selenium import webdriver
- with webdriver.Chrome() as driver:
- driver.get('https://pan.baidu.com/')
- time.sleep(2)
- x = driver.get_window_position().get('x')
- y = driver.get_window_position().get('y')
- print(f'坐标 x:{x}, 坐标 y:{y}')
- driver.find_element_by_xpath('//*[@placeholder="手机/邮箱/用户名"]').send_keys('19999999999')
- time.sleep(2)
复制代码 把坐标x和坐标y显示在控制台:
- /Users/lifeng/python-virtualenv/venv/bin/python3 /Users/lifeng/python-projects/test-python/selenium_script.py
- 坐标 x:22, 坐标 y:47
- Process finished with exit code 0
复制代码 设定视窗位置
将窗口移到所选位置
- driver.set_window_position(0, 0)
复制代码 最大化窗口
该窗口将填满整个屏幕,且不会阻塞操作系统自己的菜单和工具栏
最小化窗口
最小化窗口通常会将窗口隐藏在系统托盘中
全屏窗口
填充整个屏幕,类似于在大多数浏览器中按F11键
- driver.fullscreen_window()
复制代码 截屏
捕获当前浏览上下文的屏幕截图。返回以Base64格式编码的屏幕截图。
- from selenium import webdriver
- driver = webdriver.Chrome()
- driver.get('https://pan.baidu.com/')
- driver.save_screenshot('./image.png')
- driver.quit()
复制代码 屏幕截图
捕获当前浏览上下文的元素的屏幕快照。返回以Base64格式编码的屏幕截图
- import time
- from selenium import webdriver
- with webdriver.Chrome() as driver:
- driver.get('https://pan.baidu.com/')
- time.sleep(2)
- ele = driver.find_element_by_xpath('//*[@placeholder="手机/邮箱/用户名"]')
- ele.screenshot('../image.png')
- time.sleep(2)
复制代码
|
|