Python 爬虫基础Selenium库的使用

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

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

 作者:凯耐    来源:CSDN

  (一)Selenium基础
  1.Selenium简介
  Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。
  2.支持多种操作系统
  如WindowsLinux、IOS、Android等。
  3.安装Selenium
 pip install Selenium
  4.安装浏览器驱动
  Selenium3.x调用浏览器必须有一个webdriver驱动文件
  Chrome驱动文件下载:点击下载chromedrive
  Firefox驱动文件下载:点解下载geckodriver
  5.配置环境变量
  设置浏览器的地址非常简单。 我们可以手动创建一个存放浏览器驱动的目录,如: F:\GeckoDriver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下。
  我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将“F:\GeckoDriver”目录添加到Path的值中。比如:Path字段;F:\GeckoDriver
  参考浏览器驱动环境配置
  (二)Selenium 快速入门
  1.Selenium提供了8种定位方式:
  1.id
  2.name
  3.class name
  4.tag name
  5.link text
  6.partial link text
  7.xpath
  8.css selector
  2.定位元素的8种方式
  
  3.实例演示
  假如我们有一个Web页面,通过前端工具(如,Firebug)查看到一个元素的属性是这样的。
   <html>
  <head>
  <body link="#0000cc">
  <a id="result_logo" href="/" onmousedown="return c({'fm':'tab','tab':'logo'})">
  <form id="form" class="fm" name="f" action="/s">
  <span class="soutu-btn"></span>
  <input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off">
  通过id定位:
 dr.find_element_by_id("kw")
   通过name定位:
 dr.find_element_by_name("wd")
  通过class name定位:
 dr.find_element_by_class_name("s_ipt")
  通过tag name定位:
 dr.find_element_by_tag_name("input")
  通过xpath定位,xpath定位有N种写法,这里列几个常用写法:
   dr.find_element_by_xpath("//*[@id='kw']")
  dr.find_element_by_xpath("//*[@name='wd']")
  dr.find_element_by_xpath("//input[@class='s_ipt']")
  dr.find_element_by_xpath("/html/body/form/span/input")
  dr.find_element_by_xpath("//span[@class='soutu-btn']/input")
  dr.find_element_by_xpath("//form[@id='form']/span/input")
  dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")  1
  通过css定位,css定位有N种写法,这里列几个常用写法:
   dr.find_element_by_css_selector("#kw")
  dr.find_element_by_css_selector("[name=wd]")
  dr.find_element_by_css_selector(".s_ipt")
  dr.find_element_by_css_selector("html > body > form > span > input")
  dr.find_element_by_css_selector("span.soutu-btn> input#kw")
  dr.find_element_by_css_selector("form#form > span > input")
  接下来,我们的页面上有一组文本链接。
  <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
  <a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a>
  通过link text定位:
   dr.find_element_by_link_text("新闻")
  dr.find_element_by_link_text("hao123")
  通过partial link text定位:
   dr.find_element_by_partial_link_text("新")
  dr.find_element_by_partial_link_text("hao")
  dr.find_element_by_partial_link_text("123")
  4.Selenium库下webdriver模块常用方法的使用
  1.控制浏览器操作的一些方法
  实例演示
   from selenium import webdriver
  from time import sleep
  #1.创建Chrome浏览器对象,这会在电脑上在打开一个浏览器窗口
  browser = webdriver.Firefox(executable_path ="F:\GeckoDriver\geckodriver")
  #2.通过浏览器向服务器发送URL请求
  browser.get("https://www.baidu.com/")
  sleep(3)
  #3.刷新浏览器
  browser.refresh()
  #4.设置浏览器的大小
  browser.set_window_size(1400,800)
  #5.设置链接内容
  element=browser.find_element_by_link_text("新闻")
  element.click()
  element=browser.find_element_by_link_text("习近平的“下团组”时间")
  element.click()
  2.鼠标事件
  在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。
  实例演示
  
   from selenium import webdriver
  #1.引入 ActionChains 类
  from selenium.webdriver.common.action_chains import ActionChains
  driver= webdriver.Chrome("F:\Chrome\ChromeDriver\chromedriver")
  driver.get("https://www.baidu.cn")
  #2.定位到要悬停的元素
  element= driver.find_element_by_link_text("设置")
  #3.对定位到的元素执行鼠标悬停操作
  ActionChains(driver).move_to_element(element).perform()
  3.键盘事件
  Selenium中的Key模块为我们提供了模拟键盘按键的方法,那就是send_keys()方法。它不仅可以模拟键盘输入,也可以模拟键盘的操作。
  常用的键盘操作如下:
  组合键的使用
  4.获取断言信息
  不管是在做功能测试还是自动化测试,最后一步需要拿实际结果与预期进行比较。这个比较的称之为断言。通过我们获取title 、URL和text等信息进行断言。
  实例演示
   from selenium import webdriver
  from time import sleep
  driver = webdriver.Firefox(executable_path ="F:\GeckoDriver\geckodriver")
  driver.get("https://www.baidu.com")
  print('Before search================')
  # 打印当前页面title
  title = driver.title
  print(title)
  # 打印当前页面URL
  now_url = driver.current_url
  print(now_url)
  driver.find_element_by_id("kw").send_keys("selenium")
  driver.find_element_by_id("su").click()
  sleep(1)
  print('After search================')
  # 再次打印当前页面title
  title = driver.title
  print(title)
  # 打印当前页面URL
  now_url = driver.current_url
  print(now_url)
  # 获取结果数目
  user = driver.find_element_by_class_name('nums').text
  print(user)
  #关闭所有窗口
  driver.quit()
  打印输出结果
   Before search================
  百度一下,你就知道
  https://www.baidu.com/
  After search================
  selenium_百度搜索
  https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=selenium&rsv_pq=a1d51b980000e36e&rsv_t=a715IZaMpLd1w92I4LNUi7gKuOdlAz5McsHe%2FSLQeBZD44OUIPnjY%2B7pODM&rqlang=cn&rsv_enter=0&rsv_sug3=8&inputT=758&rsv_sug4=759
  搜索工具
  百度为您找到相关结果约7,170,000个
  5.设置元素等待

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

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号