• selenium安装配置及基本使用


    1.安装并配置selenium

    1.1 下载selenium库

    pip install selenium==3.3.0
    
    • 1

    1.2 安装chromedriver

    2. selenium使用

    2.1导入相关库

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys  
    
    • 1
    • 2
    • 3

    2.2配置相关属性

    option = webdriver.ChromeOptions()  
    option.add_argument('window-size=1920x3000')  # 指定浏览器分辨率
    option = webdriver.ChromeOptions( )
    option.add_argument('window-size=1920x3000')  # 指定浏览器分辨率
    option.add_argument('--headless') #无头
    option.add_argument('--disable-gpu')
    option.add_argument('--hide-scrollbars')  # 隐藏滚动条, 应对一些特殊页面
    option.add_argument('--proxy-server=http://127.0.0.1:1087') #添加代理
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.3 基本使用

    • 请求
       url='https:wwww.baidu.com'
       driver = webdriver.Chrome(chrome_options=option)
       driver.maximize_window() # 设置最大的窗口
       driver.get(url) # 访问连接
       driver.save_screenshot("baidu.png") # 截图
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • 查看请求信息
      driver.page_source   # 获取页面内容
      driver.get_cookies() # 获取cookie
      driver.current_url # 获取当前的url
      
      • 1
      • 2
      • 3
    • 获取cookie
      dictCookies = driver.get_cookies()
      
      • 1
    • 添加cookie
      cookies ={
      "_routing_id":"46139510-8ede-424f-b63a-e8d7aa4bdfa4",
      "sessionFunnelEventLogged":"1",
      "_auth":"1",
      "g_state":'{"i_l":0}',
      "cm_sub":"allowed"
      }
      driver.get(url) # 请求
      # 添加cookie
      driver.add_cookie({'name':'_routing_id','value':cookies['_routing_id']})
      driver.add_cookie({'name':'sessionFunnelEventLogged','value':cookies['sessionFunnelEventLogged']})
      driver.add_cookie({'name':'_auth','value':cookies['_auth']})
      driver.add_cookie({'name':'g_state','value':cookies['g_state']})
      driver.add_cookie({'name':'cm_sub','value':cookies['cm_sub']})
      #重新请求
      driver.get(url)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
    • 删除cookie
      #  删除一条cookie
      driver.delete_cookie("CookieName")
      # 删除所有的cookie
      driver.delete_all_cookies()
      
      • 1
      • 2
      • 3
      • 4
    • 退出
      driver.close()  # 退出当前页面
      driver.quit()   # 退出浏览器
      
      • 1
      • 2

    3.元素方法

    3.1 元素定位【2种方式】

    • 使用id值定位【By.ID 】

      el = driver.find_element(By.ID, '')
      el = driver.find_element_by_id()            
      
      • 1
      • 2
    • 使用xpath定位【By.XPATH】

      el = driver.find_element(By.XPATH, '')
      el = driver.find_element_by_xpath()         
      
      • 1
      • 2
    • 使用标签名定位【By.TAG_NAME】

      el = driver.find_element(By.TAG_NAME, '')
      el = driver.find_element_by_tag_name()     
      
      • 1
      • 2
    • 使用超链接文本定位【By.LINK_TEXT】

      el = driver.find_element(By.LINK_TEXT, '')
      el = driver.find_element_by_link_text() 
      
      • 1
      • 2
    • 使用部分超链接文本定位【By.PARTIAL_LINK_TEXT】

      el = driver.find_element(By.PARTIAL_LINK_TEXT  , '')
      el = driver.find_element_by_partial_link_text()
      
      • 1
      • 2
    • 使用name属性值定位【By.NAME】

      el = driver.find_element(By.NAME, '')
      el = driver.find_element_by_name()
      
      • 1
      • 2
    • 使用class属性值定位【By.CLASS_NAME 】

      el = driver.find_element(By.CLASS_NAME, '')   
      el = driver.find_element_by_class_name()
      
      • 1
      • 2
    • 使用css选择器定位【By.CSS_SELECTOR】

      el = driver.find_element(By.CSS_SELECTOR, '')  
      el = driver.find_element_by_css_selector()
      
      • 1
      • 2
    • 查找输入框

      input_name=driver.find_element(By.XPATH, '//input[@placeholder="Airport, country, hashtag, etc."]')  
       input_name.send_keys(point,Keys.ENTER) # 回车
      
      • 1
      • 2
    • 查找兄弟的下一个文本数据

      # 根据文本确认位置,在查询兄弟节点
      text=driver.find_elements(By.XPATH,"//*[text()='Coordinates']/following-sibling::td")[0].text
      
      • 1
      • 2
    • 获取页面html源码

      html=driver.page_source
      
      • 1
    • 滚轮滑动

      # 一次滑动
      js = "window.scrollTo(0,800);"
      driver.execute_script(js)
      # 多次滑动
      for i in range(10):
      	js='window.scrollBy(0,200)'
      	driver.execute_script(js)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

    3.2 元素操作

    代码含义
    el.get_attribute(key)获取key属性名对应的属性值
    el.text获取开闭标签之间的文本内容
    el.click()对元素执行点击操作
    el.submit()对元素执行提交操作
    el.clear()清空可输入元素中的数据
    el.send_keys(data,Keys.ENTER)向可输入元素输入数据,并且回车

    3.3 等待操作

    • 强制等待
      import time
      time.sleep(n)  
      
      • 1
      • 2
    • 显式等待
      from selenium.webdriver.common.keys import Keys
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      WebDriverWait(driver, 10,0.5).until( EC.presence_of_element_located((By.ID, "myDynamicElement"))
      # \设置最长等待时间10,在10秒内每隔0.5秒使用指定条件去定位元素,如果定位到元素则直接结束等待,如果在10秒结束之后仍未定位到元素则报错 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 隐式等待
      driver.implicitly_wait(10) # 在指定的n秒内每隔一段时间尝试定位元素,如果n秒结束还未被定位出来则报错
      
      • 1

    3.4 窗口切换

    • 获取当前所有的窗口
      current_windows = driver.window_handles
      
      • 1
    • 窗口索引切换
      driver.switch_to.window(current_windows[1])
      
      • 1
    • 跳转到最后一个窗口
      driver.switch_to.window(web.window_handles[-1]) 
      
      • 1
    • 跳到第一个窗口
      driver.switch_to.window(current_windows[0])
      
      • 1
    • 获取iframe窗口元素
      driver.switch_to.frame(name/el/id) 
      
      • 1
    • 获取弹窗信息
      alert = driver.switch_to_alert()
      
      • 1

    3.5页面操作

    • 前进
      driver.forward()
      
      • 1
    • 后退
      driver.back() 
      
      • 1
    • 刷新
      driver.refresh() 
      
      • 1
    • 关闭当前窗口
      driver.close()
      
      • 1
  • 相关阅读:
    Arcpy新增随机高程点、空间插值及批量制图
    java计算机毕业设计-人事管理系统-源码+数据库+系统+lw文档+mybatis+运行部署
    MIPS汇编语言学习-01-两数求和以及环境配置、如何运行
    [Ubuntu, Ajax Nx]C++调用python报from import错误
    【富文本编辑器】Ueditor的demo——创建、修改——代码使用
    PMP 通关之45天备考五重点
    《算法导论》15.5 最优二叉搜索树(含C++代码)
    docker安装minio作为图床服务
    【Unity ShaderGraph】| 制作一个 高级流体水球效果
    BAT 设置WIFI代理
  • 原文地址:https://blog.csdn.net/m0_46926492/article/details/127448514