乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      selenium與谷歌無頭瀏覽器的應(yīng)用

       黃金屋1 2019-12-11

      1.selenium的介紹

      • selenium是一個(gè)web自動(dòng)化測(cè)試用的框架. 程序員可以通過代碼實(shí)現(xiàn)對(duì)瀏覽器的控制, 比如打開網(wǎng)頁, 點(diǎn)擊網(wǎng)頁中的元素, 實(shí)現(xiàn)鼠標(biāo)滾動(dòng)等操作.

      • 它支持多款瀏覽器, 如谷歌瀏覽器, 火狐瀏覽器等等, 當(dāng)然也支持無頭瀏覽器.

      使用selenium的目的

      • 在爬取數(shù)據(jù)的過程中, 經(jīng)常遇到動(dòng)態(tài)數(shù)據(jù)加載, 一般動(dòng)態(tài)數(shù)據(jù)加載有兩種, 一種通過ajax請(qǐng)求加載數(shù)據(jù), 另一種通過js代碼加載動(dòng)態(tài)數(shù)據(jù).

      • selenium可以模擬人操作真實(shí)瀏覽器, 獲取加載完成的頁面數(shù)據(jù)

      • ajax:
        url有規(guī)律且未加密, 直接構(gòu)建url連接請(qǐng)求
        url加密過無法破解規(guī)律 --> selenium

      • js動(dòng)態(tài)數(shù)據(jù)加載 --> selenium

      2.selenium的安裝

      安裝三要素: 瀏覽器、驅(qū)動(dòng)程序、selenium框架

      瀏覽器: 推薦谷歌瀏覽器, 標(biāo)準(zhǔn)穩(wěn)定版本

      推薦谷歌的理由是因?yàn)楣雀韬糜? 并且大多數(shù)程序員都在用

      驅(qū)動(dòng)程序: 下載地址

      驅(qū)動(dòng)程序的下載版本需要和谷歌的版本一致, 前三位一致即可(例:76.0.3809)

      框架: 自己搭建即可

      以上完成后直接在控制臺(tái)輸入: pip install selenium

      3.selenium常用操作

      常用操作有很多種, 比如: 獲取頁面元素、輸入內(nèi)容、點(diǎn)擊、退出… ↓

      3.1 測(cè)試一下你的selenium

      # 從selenium中導(dǎo)入驅(qū)動(dòng)程序
      from selenium import webdriver
      # 實(shí)例化瀏覽器對(duì)象
      browser = webdriver.Chrome('driverpath')
      # 發(fā)送get請(qǐng)求:
      browser.get('https://www.baidu.com')

      dirverpath: 驅(qū)動(dòng)的存儲(chǔ)路徑, 可以直接將驅(qū)動(dòng)放在當(dāng)前腳本所在的文件夾, 如果放在本地文件夾還是無法執(zhí)行, 那就將驅(qū)動(dòng)放在谷歌瀏覽器的Application文件夾當(dāng)中, 并指明路徑

      3.2 獲取頁面元素

      find_element_by_id(): 根據(jù)元素的id獲取元素
      find_element_by_name(): 根據(jù)元素的name獲取元素
      find_element_by_xpath(): 根據(jù)xpath表達(dá)式獲取元素
      find_element_by_class_name(): 根據(jù)class的值
      find_element_by_css_selector(): 根據(jù)css選擇器

      3.3 節(jié)點(diǎn)交互操作

      click():  點(diǎn)擊
      send_keys():  輸入內(nèi)容
      clear():  清空操作
      execute_script(js代碼):  執(zhí)行指定的js代碼
      quit(): 退出瀏覽器

      列舉一段自己常用的js代碼: window.scrollTo(0, document.body.scrollHeight) 可以模擬鼠標(biāo)滾動(dòng)一屏高度

      3.4 獲取網(wǎng)頁的數(shù)據(jù)

      browser.page_source:  獲取網(wǎng)頁的源碼, str類型

      3.5 子頁面

      # 如果一個(gè)頁面是有嵌套關(guān)系的話, 可以使用frame進(jìn)入指定的頁面, 例如QQ空間
      switch_to.frame('frame')

      4.使用selenium模擬登錄qq空間

      import time
      from selenium import webdriver
      
      # 此處driverpath需要存放自己下載驅(qū)動(dòng)的路徑
      browser = webdriver.Chrome(r'driverpath')
      
      # 獲取QQ空間的url, 并發(fā)送請(qǐng)求
      url = 'https://qzone.qq.com/'
      browser.get(url)
      
      # qq空間使用的是組建嵌套,登錄要先選擇進(jìn)入到子頁面
      browser.switch_to.frame('login_frame')
      
      # 獲取賬號(hào)密碼登錄連接的id, 然后點(diǎn)擊賬號(hào)密碼登錄
      a_tag = browser.find_element_by_id('switcher_plogin')
      a_tag.click()
      # 在下面會(huì)多次用到sleep讓休眠幾秒鐘, 目的就是避免訪問過快造成被誤認(rèn)為腳本
      time.sleep(2)
      
      # 獲取賬號(hào)文本框并輸入賬號(hào)
      user = browser.find_element_by_id('u')
      user.send_keys('自己的QQ賬號(hào)')
      time.sleep(2)
      
      # 獲取密碼框并寫入密碼
      pwd = browser.find_element_by_id('p')
      pwd.send_keys('自己的QQ密碼')
      time.sleep(2)
      
      # 獲取登錄按鈕并點(diǎn)擊
      button = browser.find_element_by_id('login_button')
      button.click()

      5.谷歌無頭瀏覽器

      from selenium import webdriver
      from selenium.webdriver.chrome.options import Options
      
      # 實(shí)例化Options對(duì)象
      chrome_options = Options()
      
      # 增加一個(gè)參數(shù), 告訴瀏覽器是無頭瀏覽器
      chrome_options.add_argument('--headless')
      
      # 增加一個(gè)參數(shù), 告訴瀏覽器不需要使用GPU渲染
      chrome_options.add_argument('--disable-gpu')
      
      # 驅(qū)動(dòng)路徑, 谷歌的驅(qū)動(dòng)存放路徑
      path = r'driverpath'
      
      # 實(shí)例化瀏覽器對(duì)象
      browser = webdriver.Chrome(executable_path=path, options=chrome_options)
      
      # 打開指定的頁面
      browser.get('https://www.baidu.com')
      
      # 打印訪問頁面的源碼
      print(browser.page_source)
      
      # 將頁面源碼寫入到文件當(dāng)中
      with open('bai_du.html', 'w', encoding='utf-8') as f:
          f.write(browser.page_source)

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多