【第十二周第 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

相关文章

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Android Mainline基础简介

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