Python 爬虫基础Selenium库的使用

发表于:2019-1-02 08:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:凯耐    来源:CSDN

分享:
   6.定位一组元素
  定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数。
  实例演示
   from selenium import webdriver
  from time import sleep
  driver =webdriver.Firefox(executable_path ="F:\GeckoDriver\geckodriver")
  driver.get("https://www.baidu.com")
  driver.find_element_by_id("kw").send_keys("selenium")
  driver.find_element_by_id("su").click()
  sleep(1)
  #1.定位一组元素
  elements = driver.find_elements_by_xpath('//div/h3/a')
  print(type(elements))
  #2.循环遍历出每一条搜索结果的标题
  for t in elements:
  print(t.text)
  element=driver.find_element_by_link_text(t.text)
  element.click()
  sleep(3)
  driver.quit()
  7.多表单切换
  在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。
 
   <html>
  <body>
  ...
  <iframe id="x-URS-iframe" ...>
  <html>
  <body>
  ...
  <input name="email" >
  126邮箱登录框的结构大概是这样子的,想要操作登录框必须要先切换到iframe表单。
  from selenium import webdriver
  driver = webdriver.Chrome()
  driver.get("http://www.126.com")
  driver.switch_to.frame('x-URS-iframe')
  driver.find_element_by_name("email").clear()
  driver.find_element_by_name("email").send_keys("username")
  driver.find_element_by_name("password").clear()
  driver.find_element_by_name("password").send_keys("password")
  driver.find_element_by_id("dologin").click()
  driver.switch_to.default_content()
  driver.quit()
  switch_to.frame() 默认可以直接取表单的id 或name属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位。
   ……
  #先通过xpth定位到iframe
  xf = driver.find_element_by_xpath('//*[@id="x-URS-iframe"]')
  #再将定位对象传给switch_to.frame()方法
  driver.switch_to.frame(xf)
  ……
  driver.switch_to.parent_frame()
  8.多窗口切换
  在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作。WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换。
  实例演示
   from selenium import webdriver
  import time
  driver = webdriver.Chrome("F:\Chrome\ChromeDriver\chromedriver")
  driver.implicitly_wait(10)
  driver.get("http://www.baidu.com")
  #1.获得百度搜索窗口句柄
  sreach_windows = driver.current_window_handle
  driver.find_element_by_link_text('登录').click()
  driver.find_element_by_link_text("立即注册").click()
  #1.获得当前所有打开的窗口的句柄
  all_handles = driver.window_handles
  #3.进入注册窗口
  for handle in all_handles:
  if handle != sreach_windows:
  driver.switch_to.window(handle)
  print('跳转到注册窗口')
  driver.find_element_by_name("account").send_keys('123456789')
  driver.find_element_by_name('password').send_keys('123456789')
  time.sleep(2)
  driver.quit()
  9.警告框处理
  在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ send_keys等方法进行操作。
  实例演示
   from selenium import webdriver
  from selenium.webdriver.common.action_chains import ActionChains
  import time
  driver = webdriver.Chrome("F:\Chrome\ChromeDriver\chromedriver")
  driver.implicitly_wait(10)
  driver.get('http://www.baidu.com')
  # 鼠标悬停至“设置”链接
  link = driver.find_element_by_link_text('设置')
  ActionChains(driver).move_to_element(link).perform()
  # 打开搜索设置
  driver.find_element_by_link_text("搜索设置").click()
  #在此处设置等待2s否则可能报错
  time.sleep(2)
  # 保存设置
  driver.find_element_by_class_name("prefpanelgo").click()
  time.sleep(2)
  # 接受警告框
  driver.switch_to.alert.accept()
  driver.quit()
  10.下拉框选择操作
  导入选择下拉框Select类,使用该类处理下拉框操作。
 from selenium.webdriver.support.select import Select
  Select类的方法
  有时我们会碰到下拉框,WebDriver提供了Select类来处理下拉框。 如百度搜索设置的下拉框,如下图:
   from selenium import webdriver
  from selenium.webdriver.support.select import Select
  from time import sleep
  driver = webdriver.Chrome("F:\Chrome\ChromeDriver\chromedriver")
  driver.implicitly_wait(10)
  driver.get('http://www.baidu.com')
  #1.鼠标悬停至“设置”链接
  driver.find_element_by_link_text('设置').click()
  sleep(1)
  #2.打开搜索设置
  driver.find_element_by_link_text("搜索设置").click()
  sleep(2)
  #3.搜索结果显示条数
  sel = driver.find_element_by_xpath("//select[@id='nr']")
  Select(sel).select_by_value('50')  # 显示50条
  sleep(3)
  driver.quit()
  11.文件上传
  对于通过input标签实现的上传功能,可以将其看作是一个输入框,即通过send_keys()指定本地文件路径的方式实现文件上传。
  通过send_keys()方法来实现文件上传:
   from selenium import webdriver
  import os
  driver = webdriver.Firefox()
  file_path = 'file:///' + os.path.abspath('upfile.html')
  driver.get(file_path)
  # 定位上传按钮,添加本地文件
  driver.find_element_by_name("file").send_keys('D:\\upload_file.txt')
  driver.quit()
  12.cookie操作
  有时候我们需要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试进行的。WebDriver提供了操作Cookie的相关方法,可以读取、添加和删除cookie信息。
  WebDriver操作cookie的方法:
  实例演示
   from selenium import webdriver
  import time
  browser = webdriver.Chrome("F:\Chrome\ChromeDriver\chromedriver")
  browser.get("http://www.youdao.com")
  #1.打印cookie信息
  print('=====================================')
  print("打印cookie信息为:")
  print(browser.get_cookies)
  #2.添加cookie信息
  dict={'name':"name",'value':'Kaina'}
  browser.add_cookie(dict)
  print('=====================================')
  print('添加cookie信息为:')
  #3.遍历打印cookie信息
  for cookie in browser.get_cookies():
  print('%s----%s\n' %(cookie['name'],cookie['value']))
  #4.删除一个cookie
  browser.delete_cookie('name')
  print('=====================================')
  print('删除一个cookie')
  for cookie in browser.get_cookies():
  print('%s----%s\n' %(cookie['name'],cookie['value']))
  print('=====================================')
  print('删除所有cookie后:')
  #5.删除所有cookie,无需传递参数
  browser.delete_all_cookies()
  for cookie in browser.get_cookies():
  print('%s----%s\n' %(cookie['name'],cookie['value']))
  time.sleep(3)
  browser.close()
  13.调用JavaScript代码
  虽然WebDriver提供了操作浏览器的前进和后退方法,但对于浏览器滚动条并没有提供相应的操作方法。在这种情况下,就可以借助JavaScript来控制浏览器的滚动条。WebDriver提供了execute_script()方法来执行JavaScript代码。
  用于调整浏览器滚动条位置的JavaScript代码如下:
   <!-- window.scrollTo(左边距,上边距); -->
  window.scrollTo(0,450);
  window.scrollTo()方法用于设置浏览器窗口滚动条的水平和垂直位置。方法的第一个参数表示水平的左间距,第二个参数表示垂直的上边距。其代码如下:
   from selenium import webdriver
  from time import sleep
  #1.访问百度
  driver=webdriver.Firefox(executable_path ="F:\GeckoDriver\geckodriver")
  driver.get("http://www.baidu.com")
  #2.搜索
  driver.find_element_by_id("kw").send_keys("selenium")
  driver.find_element_by_id("su").click()
  #3.休眠2s目的是获得服务器的响应内容,如果不使用休眠可能报错
  sleep(2)
  #4.通过javascript设置浏览器窗口的滚动条位置
  js="window.scrollTo(100,450);"
  driver.execute_script(js)
  sleep(3)
  driver.close()
  通过浏览器打开百度进行搜索,并且提前通过set_window_size()方法将浏览器窗口设置为固定宽高显示,目的是让窗口出现水平和垂直滚动条。然后通过execute_script()方法执行JavaScripts代码来移动滚动条的位置。
  14.窗口截图
  自动化用例是由程序去执行的,因此有时候打印的错误信息并不十分明确。如果在脚本执行出错的时候能对当前窗口截图保存,那么通过图片就可以非常直观地看出出错的原因。WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口。
  截屏方法:
 
   from selenium import webdriver
  from time import sleep
  driver =webdriver.Firefox(executable_path ="F:\GeckoDriver\geckodriver")
  driver.get('http://www.baidu.com')
  driver.find_element_by_id('kw').send_keys('selenium')
  driver.find_element_by_id('su').click()
  sleep(2)
  #1.截取当前窗口,并指定截图图片的保存位置
  driver.get_screenshot_as_file("D:\\baidu_img.jpg")
  driver.quit()
  15.关闭浏览器
  在前面的例子中我们一直使用quit()方法,其含义为退出相关的驱动程序和关闭所有窗口。除此之外,WebDriver还提供了close()方法,用来关闭当前窗口。例多窗口的处理,在用例执行的过程中打开了多个窗口,我们想要关闭其中的某个窗口,这时就要用到close()方法进行关闭了。

     上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号