Python----Python爬虫(selenium的使用,处置处罚弹窗,拖拽元素,调用js方 ...

打印 上一主题 下一主题

主题 1855|帖子 1855|积分 5575

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
一、处置处罚弹窗

   在处置处罚网页中的弹出窗口时,Selenium 提供了便捷的方法来管理这些对话框。通常环境下,你可能会遇到警告或提示窗口,这时必要将焦点切换到弹出的对话框上并进行操作。
    处置处罚弹出窗口

  

  • 切换焦点到弹出窗口
    使用 switch_to.alert 可以将焦点切换到页面上的警告(提示)窗口。

  • 确认弹出窗
    使用 accept() 方法来点击弹出窗口上的“确定”按钮。​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

  • 取消弹出窗
    使用 dismiss() 方法来点击弹出窗口上的“取消”按钮。

    1.html界面
  

  2.运行结果完成
  
 3.html代码
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>This is a page</title>
  6. </head>
  7. <body>
  8.     <div id = "container">
  9.         <div style="font: size 30px;">Hello,Python Spider</div>
  10.     </div>
  11. </body>
  12. <script>
  13.     alert('这个是测试弹窗')
  14. </script>
  15. </html>
复制代码
4.程序设计
  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'test03.html')
  8. # 设置等待时间
  9. time.sleep(3)
  10. # 接受弹窗
  11. edge.switch_to.alert.accept()
  12. # 设置等待时间
  13. time.sleep(3)
  14. # 关闭浏览器
  15. edge.quit()
复制代码
二、拖拽元素

   

  • webdriver.ActionChains(edge): 创建一个 ActionChains 对象,这里 edge 是指使用 Microsoft Edge 驱动的 WebDriver 实例。
  • drag_and_drop(div1, div2): 指定拖动操作,div1 是待拖动的元素,div2 是放置目标元素。
  • perform(): 执行上面界说的动作。​​​​​​​



  


   1.html文件
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4.         <meta charset="utf-8">
  5.         <meta name="viewport" content="width=device-width, initial-scale=1">
  6.         <title>jQuery UI Draggable - Auto-scroll</title>
  7.         <link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  8.         <style>
  9.         #draggable, #draggable2, #draggable3 { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 0 10px 10px 0; }
  10.     body {font-family: Arial, Helvetica, sans-serif;}
  11.     table {font-size: 1em;}
  12.     .ui-draggable, .ui-droppable {background-position: top;}
  13.         </style>
  14.         <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  15.         <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  16.         <script>
  17.         $( function() {
  18.                 $( "#draggable" ).draggable({ scroll: true });
  19.                 $( "#draggable2" ).draggable({ scroll: true, scrollSensitivity: 100 });
  20.                 $( "#draggable3" ).draggable({ scroll: true, scrollSpeed: 100 });
  21.         } );
  22.         </script>
  23. </head>
  24. <body>
  25. <div id="draggable" class="ui-widget-content">
  26.         <p>Scroll set to true, default settings</p>
  27. </div>
  28. <div id="draggable2" class="ui-widget-content">
  29.         <p>scrollSensitivity set to 100</p>
  30. </div>
  31. <div id="draggable3" class="ui-widget-content">
  32.         <p>scrollSpeed set to 100</p>
  33. </div>
  34. <div style="height: 5000px; width: 1px;"></div>
  35. </body>
  36. </html>
复制代码
2.程序设计
  1. from selenium.webdriver.common.by import By
  2. from selenium.webdriver import  Edge
  3. from selenium import webdriver
  4. import time
  5. # 创建一个浏览器
  6. edge=Edge()
  7. # 发送请求
  8. edge.get(r'test04.html')
  9. # 设置等待时间
  10. time.sleep(3)
  11. # 获取div元素
  12. div1=edge.find_element(By.ID,'draggable')
  13. div2=edge.find_element(By.ID,'draggable2')
  14. div3=edge.find_element(By.ID,'draggable3')
  15. time.sleep(3)
  16. # 把div1移动到div2上面
  17. webdriver.ActionChains(edge).drag_and_drop(div1,div2).perform()
  18. time.sleep(3)
  19. # 将div3每0.5秒移动10,10
  20. for i in range(10):
  21.     webdriver.ActionChains(edge).drag_and_drop_by_offset(div3,10,10).perform()
  22.     time.sleep(0.5)
  23. # 设置等待时间
  24. time.sleep(3)
  25. # 关闭浏览器
  26. edge.quit()
复制代码
三、调用js方法

   在 Selenium 中,有时间必要控制网页的滚动条,而滚动条通常不是普通的元素。这时间,我们可以用 JavaScript 来操作滚动条。
    execute_script ()是 Selenium WebDriver 中的一个非常强盛的方法,允许你在浏览器的当前上下文中执行 JavaScript 代码。这个方法可以用于操作 DOM、获取元素属性、控制页面滚动等多种场景
  1. driver.execute_script(script, *args)
复制代码
参数阐明
  

  • script: 这是要执行的 JavaScript 代码,作为字符串传递。你可以编写任意有效的 JavaScript 代码。
  • *args: 可选参数,可以传递一个或多个参数到脚本中。这些参数将被转换为 JavaScript 的对象,并可直接在脚本中使用(好比,你可以传递 WebElement 对象的引用)。
  返回值
  

  • execute_script() 方法将返回 JavaScript 代码的执行结果。假如没有返回值,返回 None。
    js= 'document.documentElement.scrollTop=100000' 
  

  • document.documentElement: 代表文档的根元素,通常是 <html> 标签。在这里,我们可以通过它来访问整个页面的属性和方法。
  • scrollTop: 是一个属性,用于获取或设置元素的垂直滚动位置。对于 document.documentElement,它表现页面的滚动高度。
  • 100000: 将页面的垂直滚动位置设置为 100,000 像素。这样做的效果是将页面滚动到底部(大概尽可能靠近底部,具体取决于页面的现实高度)。
  1. from selenium.webdriver.common.by import By
  2. from selenium.webdriver import  Edge
  3. from selenium import webdriver
  4. import time
  5. # 创建一个浏览器
  6. edge=Edge()
  7. # 访问页面
  8. edge.get("https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&suggest=1.def.0.SAK7|MIXTAG_SAK7R,SAK7_M_AM_L5385,SAK7_M_COL_R,SAK7_S_AM_R,SAK7_SC_PD_R,SAK7_SM_PB_R,SAK7_SS_PM_R,tsabtest_base64_U2VhcmNobGlzdF80MzkyfGJhc2U_tsabtest|&wq=shouji&pvid=24340a2def0e4e0cb510af07aa32c89d")
  9. # 设置等待时间
  10. time.sleep(3)
  11. # 拉动滚动条到底部
  12. js = 'document.documentElement.scrollTop=100000'
  13. edge.execute_script(js)
  14. # 设置等待时间
  15. time.sleep(3)
  16. # 关闭浏览器
  17. edge.quit()
复制代码
四、等候元素

4.1、强制等候

   使用 time.sleep    
          作用:当代码运行到强制等候这一行的时间,无论出于什么原因,都强制等候指定的时间,必要通过time模块实现
          优点:简单
          缺点:无法做有效的判断,会浪费时间
  4.2、隐式等候

   chrome.implicitly_wait(time_num)
          到了肯定的时间发现元素还没有加载,则继续等候我们指定的时间,假如超过了我们指定的时间还没有加载就会抛出异常,假如没有必要等候的时间就已经加载完毕就会立即执行
  
          优点: 设置一次即可
          缺点:必须等候加载完成才能到后续的操作,大概等候超时才能进入后续的操作
          注意:只能等候元素出现在 DOM 中
  4.3、显示等候

   from selenium.webdriver.support.wait import WebDriverWait
          指定一个等候条件,并且指定一个最长等候时间,会在这个时间内进行判断是否满足等候条件,假如成立就会立即返回,假如不成立,就会一直等候,直到等候你指定的最长等候时间,假如还是不满足,就会抛出异常,假如满足了就会正常返回
          优点:专门用于对指定一个元素等候,加载完即可运行后续代码
          缺点:多个元素都必要要单独设置等候
    常见的等候条件
  

  • EC.presence_of_element_located() 元素存在
  • EC.visibility_of_element_located() 元素可见
  • EC.element_to_be_clickable() 元素可点击
  • EC.presence_of_all_elements_located() 全部元素存在
  五、参数使用

5.1、无头浏览器
   无头浏览器运行时不显示用户界面,适用于必要在服务器或自动化环境中运行测试而不必要可视化反馈的场景。
    options = Options()
  options.add_argument('--headless')
  1. from selenium.webdriver import  Edge
  2. from selenium.webdriver.chrome.options import Options
  3. print("=== 使用无头模式测试 ===")
  4. # 创建参数对象
  5. options = Options()
  6. options.add_argument('--headless')
  7. # 创建一个浏览器
  8. edge=Edge(options=options)
  9. # 发送请求
  10. edge.get('https://www.baidu.com/')
  11. # 获取HTML
  12. page = edge.page_source
  13. # 打印
  14. print(page)
  15. # 关闭浏览器
  16. edge.quit()
复制代码
5.2、署理模式
   使用署理可以帮助隐藏真实 IP 地址或用于绕过地域限制。你可以设置署理服务器以便 Selenium 通过署理访问网页。
    options = Options()
  options.add_argument('--proxy-server=http://127.0.0.1:7890')
  1. from selenium.webdriver import  Edge
  2. from selenium.webdriver.chrome.options import Options
  3. # 设置代理  
  4. options = Options()  
  5. options.add_argument('--proxy-server=http://127.0.0.1:7890')  # 设置代理地址和端口  
  6. # 创建一个浏览器
  7. edge=Edge(options=options)
  8. # 发送请求
  9. edge.get('https://www.baidu.com/')
  10. # 获取HTML
  11. page = edge.page_source
  12. # 打印
  13. print(page)
  14. # 关闭浏览器
  15. edge.quit()
复制代码
5.3、防检测设置
   有些网站使用技术本领来检测是否是自动化工具(如 Selenium)在操作。通过添加一些参数,可以淘汰被检测的可能性。
    options = Options()
  options.add_argument('--disable-blink-features=AutomationControlled')
  1. from selenium.webdriver import  Edge
  2. from selenium.webdriver.chrome.options import Options
  3. # 防检测设置  
  4. options = Options()  
  5. options.add_argument('--disable-blink-features=AutomationControlled')  # 禁用自动化检测特征  
  6. # 创建一个浏览器
  7. edge=Edge(options=options)
  8. # 发送请求
  9. edge.get('https://www.baidu.com/')
  10. # 获取HTML
  11. page = edge.page_source
  12. # 打印
  13. print(page)
  14. # 关闭浏览器
  15. edge.quit()
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

篮之新喜

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