【第十二周第 3 节】:Selenium 基础(二)

2024-02-28 13:18

本文主要是介绍【第十二周第 3 节】:Selenium 基础(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第十二周-第三节课

selenium配置

  • execute_path

    browser = webdriver.Chrome(executable_path=driver_path, chrome_options=chrome_options)
    
  • chrome_options

    chrome浏览器的配置对象

    https://peter.sh/experiments/chromium-command-line-switches/
    
    • 添加代理

      proxy = "127.0.0.1:8888"
      chrome_options.add_argument(f"--proxy-server={proxy}")
      
    • 去除navigator.webdriver属性

      chrome_options.add_argument("disable-blink-features=AutomationControlled")
      
    • 设置请求头

      ua = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"chrome_options.add_argument(f"--user-agent={ua}")
      
    • 无头模式

      取消了页面渲染部分, 减少了资源消耗的同时, 增加了被反爬风险.

      chrome_options.add_argument("--headless")
      
    • 加载用户缓存

      可以像我们正常使用浏览器一样, 记录使用记录和cookie.

      如果不指定用户缓存的路径, 不指定的时候会创建临时文件夹.

      如果selenium实例没有正常销毁, 那么当前缓存文件夹不会被删除, 长此以往会占用大量磁盘空间

      chrome_options.add_argument(f"--user-data-dir={user_dir}")
      
    • 加载插件

      chrome_options.add_extension(插件路径)
      

执行JS

  • 执行JS

    browser.execute_script("return location.href")
    
  • 在页面初始前注入JS

    browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: ()=> 'my_webdriver'})"""})
    

窗口操作

  • window

    • 窗口的最大化

      browser.maximize_window()
      
    • 自定义窗口大小

      browser.set_window_size(width=1660, height=960)
      
    • 新建窗口

      selenium框架是不提供新建窗口的方法的, 但是我们可以通过JS来控制新建一个窗口.

      browser.execute_script("window.open('http://baidu.com')")
      
    • 切换窗口

      新建和删除窗口不会更改当前窗口的控制权, 需要通过切换窗口来控制.

      browser.switch_to.window(self.browser.window_handles[-1])wind
      
  • frame

    窗口中的嵌套document, 需要切换到frame环境下才可以解析

    iframe = browser.find_element_by_css_selector(...)
    browser.switch_to.frame(iframe)# 切回原来的窗口环境
    # 只要切换原来的窗口即可
    browser.switch_to.window(self.browser.window_handles[index])
    

页面解析

  • 通过CSS_SELECTOR

    browser.find_element_by_css_selector
    
  • 通过BeautifulSoup库

    soup = BeautifulSoup(browser.page_source, 'lxml')
    

等待事件

  • time.sleep

  • WeDriverWaitexpected_conditions

    https://selenium-python-zh.readthedocs.io/en/latest/api.html#module-selenium.webdriver.support.expected_conditions

    等待事件本质就是根据expected_conditions进行轮询.

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC# 声明一个事件等待对象
    waiter = WebDriverWait(browser, 10)
    
    • 等待某个元素渲染完毕

      waiter.until(EC.presence_of_element_located((By.ID, "myDynamicElement"))
      
    • 等待当前元素在DOM可点击

      waiter.until(EC.presence_to_be_clickable((By.ID, "myDynamicElement"))
      

模拟事件

  • ActionChains

    行为链, 可以模拟连续的用户行为.

    from selenium.webdriver import ActionChainsac = ActionChains(self.browser)
    
  • 模拟鼠标输入

    • 鼠标移动, 点击事件

      # 将鼠标移动到某个元素上方
      ac.move_to_element(search_button).click().perform()
      
    • 根据相对位置移动鼠标

      move_by_offset(x, y)
      
    • 拖动元素

      drag_and_drop
      
    • 拖到元素到相对位置

      drag_and_drop_by_offset
      
  • 模拟键盘输入

    https://selenium-python-zh.readthedocs.io/en/latest/api.html#module-selenium.webdriver.common.keys

    • 模拟ENTER

      from selenium.webdriver.common.keys import Keysac = ActionChains(self.browser)
      ac.send_keys(Keys.ENTER).perform()
      

这篇关于【第十二周第 3 节】:Selenium 基础(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/755604

相关文章

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]