selenium模块

- 便捷获取网站中动态加载的数据

- 便捷实现模拟登录

什么是selenium?

  - 基于浏览器自动化的一个模块

使用:

  pip3 install selenium

  下载浏览器驱动程序 http://chromedriver.storage.googleapis.com/index.html (基于谷歌,对应版本)

  - 实例化浏览器对象

  

 

 

 selenium模块_第1张图片

 

 


 

  - page_text = bro.page_source#页面源码数据

  - bro.quit() #浏览器关闭

  - bro.find系列.... element 单个节点  elements多个节点 返回列表

  - xxx = bro.find...

     xxx.send_keys('xxxxx') / clear()/

    xxx.click()

  - bro.execute_script('window.scrollTo(0,5000)') #滚轮滚动   document.body.scrollHeight #滚动一屏  #执行js代码

  - bro.back()回退

  - bro.forward()前进 

  - bro.save_screenshot(''文件保存路径“) 当前页面截屏

  - -节点.get_attribute('xx')

  - 节点.text  .id ,size ,tag_name


selenium处理iframe

  如果定位的标签处于iframe标签中则必须通过如下操作:

    - bro.switch_to.frame('被定为的iframe标签id')

拖拽动作: 通过动作链

    - from selenium.webdriver import ActionChains

     action = ActionChains(bro)

     action.click_and_hold(''brofind的标签 '')

      for i in range(5):

        action.move_by_offset(像素(数字,水平),像素(数字,竖直放心)).perform() #perform表示立即执行

    action.release() #释放动作链


 

等待:

  - 隐式

    bro.implicitly_wait(时间)

  -显式

    

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
bro = webdriver.Chrome(executable_path='spider_tools/chromedriver.exe')
bro.get('https://www.taobao.com')
wait = WebDriverWait(bro,10)
input = wait.until(EC.presence_of_element_located((By.ID,'q')))

 

 


无可视化界面(无头浏览器)

 

  

from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')

bro = webdriver.Chrome(executable_path='spider_tools/chromedriver.exe',options=options)

 


 

cookies:

  bro.get_cookies() 

    bro.add_cookie(字典)

  bro.delete_all_cookies()


    规避selenium被检测到风险

  

  1. from selenium.webdriver import ChromeOptions
  2. option = ChromeOptions()
  3. option.add_experimental_option('excludeSwitches', ['enable-automation'])
  4. browser=webdriver.Chrome(executable_path=path,options=option)

 

 

验证码坐标:

  code_img_ele = bro.find....()

  location = code_img_ele.location#验证码左上角图标

  size = code_img_ele.size #验证码对应的长和宽

  rangle = (

    int(location['x']),int(location['y']),int(location['x']+size['width']),int(location['y']+size['height'])

 #rangle为验证码区域  左上角图标, 右下角图标

 from PIL import Image

  i = Image.open('图片路径')

 frame = i.crop(rangle) #指定区域图片的裁剪

 code_img_name = 'code.png'

  frame.save(code_img_name)#保存

 

你可能感兴趣的:(selenium模块)