Python----Python爬虫(selenium的使用,定位元素,层级定位) ...

打印 上一主题 下一主题

主题 1876|帖子 1876|积分 5628

一、介绍与安装


   Selenium是一个Web的主动化测试工具,最初是为网站主动化测试而开辟的,类型像我们玩游戏用的按键精灵,可以按指定的下令主动操作,差别是Selenium 可以直接运行在欣赏器上,它支持全部主流的欣赏器。
  Selenium 可以根据我们的指令,让欣赏器主动加载页面,获取必要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。
  Selenium 自己不带欣赏器,不支持欣赏器的功能,它必要与第三方欣赏器结合在一起才能使用。
  Selenium 官方参考文档:http://selenium-python.readthedocs.io/index.html
    pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple    
    注意
  selenium操作欣赏器必要驱动(driver)
  

  • selenium版本是4.6.0以上,会主动下载
  • selenium版本是4.6.0以前,必要手动下载
  第一个 selenium程序

  1. from selenium.webdriver import  Edge
  2. # 创建一个浏览器
  3. edge=Edge()
  4. # 发送请求
  5. edge.get('https://www.baidu.com/')
  6. # 获取HTML
  7. page = edge.page_source
  8. # 打印
  9. print(page)
  10. # 关闭浏览器
  11. edge.quit()
复制代码
二、控制欣赏器

2.1、最大化窗口

   edge.maximize_window()
  

  1. from selenium.webdriver import  Edge
  2. import time
  3. # 创建一个浏览器
  4. edge=Edge()
  5. # 发送请求
  6. edge.get('https://www.baidu.com/')
  7. # 最大化窗口
  8. edge.maximize_window()
  9. # 设置等待时间,以便更清晰的观看到
  10. time.sleep(5)
  11. # 关闭浏览器
  12. edge.quit()
复制代码

2.2、设置高与宽

   edge.set_window_size(500,500)
  

  

2.3、欣赏器进步退却

进步

   edge.forward()
  

  退却

   edge.back()
  

  进步退却一体化展示

   设计思路:
          1.从某网站到csdn
          2.从csdn到某网站
          3.从某网站再回到csdn
  1. from selenium.webdriver import  Edge
  2. import time
  3. # 创建一个浏览器
  4. edge=Edge()
  5. # 发送请求
  6. edge.get('https://www.baidu.com/')
  7. # 设置等待时间
  8. time.sleep(3)
  9. # 请求到另一个网址
  10. edge.get('https://www.csdn.net/?spm=1001.2014.3001.4476')
  11. # 设置等待时间,以便更清晰的观看到
  12. time.sleep(3)
  13. # 后退
  14. edge.back()
  15. # 设置等待时间
  16. time.sleep(5)
  17. # 前进
  18. edge.forward()
  19. # 设置等待时间
  20. time.sleep(5)
  21. # 关闭浏览器
  22. edge.quit()
复制代码
三、定位元素

   对象的定位应是主动化的核心。要操作一个对象,首先必须辨认它。对象就像一个人一样,具有多种特性(属性),比方可以通过身份证号、姓名,或居住街道、楼层和门牌号来查找这个人。 Selenium定位元素的过程也可以鉴戒这一点。
  3.1、对象定位

   webdriver提供了对象定位方法
          find_element(type,value)
          查找并返回页面上的第一个符合条件的单一元素。
  

        find_elements(type,value)
          查找并返回页面上全部符合条件的元素,返回一个元素列表。
  

   

  • type: 定位方式(定位器),可选值包括:

    • By.ID:通过元素的 ID 定位。
    • By.NAME:通过元素的 NAME 属性定位。
    • By.CLASS_NAME:通过元素的类名定位。
    • By.TAG_NAME:通过元素的标签名定位。
    • By.LINK_TEXT:通过链接文本定位。
    • By.PARTIAL_LINK_TEXT:通过部分链接文本定位。
    • By.XPATH:通过 XPath 表达式定位。
    • By.CSS_SELECTOR:通过 CSS 选择器定位。

  • value: 定位值,依靠于上述选择器类型。

  3.2、操作元素 

   在 Selenium 中,操作元素是主动化测试的核心部分。操作元素通常包括点击、输入文本、获取文本、扫除文本、拖动等。
  

  • click 点击对象
  • send_keys 在对象上模拟按键输入
  • clear 扫除对象的内容,如果可以的话
  1. 点击元素
          方法: click()
          用途:模拟用户点击某个元素(如按钮、链接等)。
  

  2. 输入文本
          方法: send_keys()
          用途:在输入框中输入文本或字符。
  

  3. 扫除输入框内容
          方法: clear()
          用途:扫除输入框或文本地区中的内容。
  

  3.3、展示 

   1.获取输入框input的id元素
  

  2.在输入框中输入csdn
  

  3.加入点击事件,使得网页进入csdn网页
  

  

  1. from selenium.webdriver.common.by import By
  2. from selenium.webdriver import  Edge
  3. import time
  4. # 创建一个浏览器
  5. edge=Edge()
  6. # 发送请求
  7. edge.get('https://www.baidu.com/')
  8. # 设置等待时间
  9. time.sleep(3)
  10. # 找到id并输入csdn
  11. edge.find_element(By.ID,"kw").send_keys('csdn')
  12. time.sleep(1)
  13. # 找到搜索并加入点击事件
  14. edge.find_element(By.ID,"su").click()
  15. # 设置等待时间
  16. time.sleep(3)
  17. # 关闭浏览器
  18. edge.quit()
复制代码
 四、定位下拉菜单

   在爬取数据时,有时数据太多,而官网提供了筛选功能select标签,像如许的数据,我们只必要定位元素,点击即可
     HTML界面
  

    元素定位
  

  1. <html>
  2.     <head>
  3.         <meta http-equiv="content-type" content="text/html;charset=utf-8" />
  4.         <title>Level Locate</title>        
  5.         <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
  6.         <link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.9/dist/css/bootstrap.min.css" rel="stylesheet" />        
  7.     </head>
  8.     <body>
  9.         <h3>Level locate</h3>
  10.         <div class="span3 col-md-3">        
  11.             <div class="well">
  12.                 <div class="dropdown">
  13.                     <a class="dropdown-toggle" data-toggle="dropdown" href="#">Link1</a>
  14.                     <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel" id="dropdown1" >
  15.                         <li><a tabindex="-1" href="https://www.csdn.net/?spm=1001.2014.3001.4476">Action</a></li>
  16.                         <li><a tabindex="-1" href="#">Another action</a></li>
  17.                         <li><a tabindex="-1" href="#">Something else here</a></li>
  18.                         <li class="divider"></li>
  19.                         <li><a tabindex="-1" href="#">Separated link</a></li>
  20.                     </ul>
  21.                 </div>               
  22.             </div>            
  23.         </div>
  24.         <div class="span3 col-md-3">        
  25.             <div class="well">
  26.                 <div class="dropdown">
  27.                     <a class="dropdown-toggle" data-toggle="dropdown" href="#">Link2</a>
  28.                     <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel" >
  29.                         <li><a tabindex="-1" href="#">Action</a></li>
  30.                         <li><a tabindex="-1" href="#">Another action</a></li>
  31.                         <li><a tabindex="-1" href="#">Something else here</a></li>
  32.                         <li class="divider"></li>
  33.                         <li><a tabindex="-1" href="#">Separated link</a></li>
  34.                     </ul>
  35.                 </div>               
  36.             </div>            
  37.         </div>
  38.     </body>
  39.     <script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.9/dist/js/bootstrap.min.js"></script></html>
复制代码
  1. from selenium.webdriver.common.by import By
  2. from selenium.webdriver import  Edge
  3. import time
  4. # 创建一个浏览器
  5. edge=Edge()
  6. # 发送请求
  7. edge.get(r'test01.html')
  8. # 设置等待时间
  9. time.sleep(3)
  10. # 找到class属性
  11. edge.find_element(By.CLASS_NAME,"dropdown-toggle").click()
  12. time.sleep(1)
  13. # 找到要移动的位置加入点击事件
  14. edge.find_element(By.LINK_TEXT,'Action').click()
  15. # 设置等待时间
  16. time.sleep(3)
  17. # 关闭浏览器
  18. edge.quit()
复制代码
五、层级定位 


   在当代 Web 应用中,常常会使用框架(iframe)或新窗口,这可能会给元素定位带来挑衅。纵然定位器精确,如果元素位于一个框架内,也可能无法乐成定位。这时,就必要查抄元素是否在框架中。
  Selenium WebDriver 提供了 switch_to.frame() 方法,可以轻松切换到指定框架,从而解决问题。
     switch_to.frame()
  

    1.界面展示
  
 inner.html
  1. <html>
  2. <head>
  3.     <meta http-equiv="content-type" content="text/html;charset=utf-8" />
  4.     <title>inner</title>
  5. </head>
  6. <body>
  7.     <div class="row-fluid">
  8.         <div class="span6 well">
  9.             <h3>inner</h3><iframe id="f2" src="https://www.csdn.net/?spm=1001.2014.3001.4476" width="1400" height="1100"></iframe>
  10.         </div>
  11.     </div>
  12. </body>
  13. </html>
复制代码
outer.html
  1. <html>
  2. <head>
  3.     <meta http-equiv="content-type" content="text/html;charset=utf-8" />
  4.     <title>frame</title>
  5.     <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
  6.     <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css"
  7.         rel="stylesheet" />
  8. </head>
  9. <body>
  10.     <div class="row-fluid">
  11.         <div class="span10 well">
  12.             <h3>frame</h3><iframe id="f1" src="inner.html" width="1500" , height="1200"></iframe>
  13.         </div>
  14.     </div>
  15. </body>
  16. <script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.8/dist/js/bootstrap.min.js"></script></html>
  17. </html>
复制代码
  
  1. from selenium.webdriver.common.by import By
  2. from selenium.webdriver import  Edge
  3. import time
  4. # 创建一个浏览器
  5. edge=Edge()
  6. # 发送请求
  7. edge.get(r'outer.html')
  8. # 设置等待时间
  9. time.sleep(3)
  10. # 切换frame
  11. edge.switch_to.frame('f1')
  12. edge.switch_to.frame('f2')
  13. # 设置等待时间
  14. time.sleep(3)
  15. # 定位元素,输入要搜索的内容
  16. edge.find_element(By.ID,'toolbar-search-input').send_keys('蹦蹦跳跳真可爱589')
  17. # 设置等待时间
  18. time.sleep(3)
  19. # 定位按钮,点击搜索
  20. edge.find_element(By.ID,'toolbar-search-button').click()
  21. # 设置等待时间
  22. time.sleep(3)
  23. # 关闭浏览器
  24. edge.quit()
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表