1. 程式人生 > >Selenium元素處理

Selenium元素處理

1.加快Selenium爬取速度

  • 控制css載入---

 抓取過程僅僅抓取頁面內容,CSS樣式檔案是用來控制頁面外觀和元素房子位置的,對內容並沒有影響,可以限制

            網頁載入CSS,從而減少抓取時間,程式碼如下:

        from selenium import webdriver

        f = webdriver.FirefoxProfile()
        f.set_preference("permissions.default.stylesheet",2)

        driver = webdriver.Firefox(firefox_profile = f)
        driver.get('https://www.douban.com/')

 

  • 控制圖片載入---

 1)Firefox 如果不需要抓取圖片可以禁止圖片載入從而提高效率,程式碼如下:

          from selenium import webdriver

          f = webdriver.FirefoxProfile()
          f.set_preference("permissions.default.image",2)

          driver = webdriver.Firefox(firefox_profile = f)
          driver.get('https://www.douban.com/')

2)Chrome 的限制圖片和JAVAscript

          import requests
          from selenium import webdriver

          options = webdriver.ChromeOptions()
          prefs = {
              'profile.default_content_setting_values': {
                   'images': 2,
                'javascript': 2
                }
             }
          options.add_experimental_option('prefs', prefs)

          driver = webdriver.Chrome(chrome_options=options)
          driver.get('http://www.dianping.com/search/category/7/10/p1')
          driver.implicitly_wait(20)

 

  •    控制JavaScript執行,如需要內容不是通過JavaScript動態載入得到的,可禁止載入從而提高效率程式碼如下:
           from selenium import webdriver

           f = webdriver.FirefoxProfile()
           f.set_preference("javascript.enabled",False)

           driver = webdriver.Firefox(firefox_profile = f)
           driver.get('https://www.douban.com/')

 

2.Selnium選擇元素的方法

    .find_element_by_css_selector
    
        通過元素的 class 選擇,

        如 <div class='bdy-inner'>text</div>
        可以使用  .find_element_by_css_selector('div.bdy-inner')提取text

        如<a href="http://www.kugou.com/song/o35k304.html" data-active="playDwn" data-
             index="0" class="pc_temp_songname" itle="火箭少女101 - 卡里"hidefocus="true">
           火箭少女101 - 卡路里</a>
        可以使用  .find_element_by_css_selector('a.pc_temp_songname').text  提取‘火箭少女    
                  101 - 卡路里’



    .find_element_by_xpath

        通過 xpath 選擇,

        如 <span class="pc_temp_time"> 3:52</span>
        可以使用  .find_element_by_xpath('//span[@class="pc_temp_time"]').text 提取 
                  ‘3:52’                                                                                                                  



#注意:上述是查詢一個元素,如要查詢多個元素可以改成 elements 返回的是列表





    .find_element_by_link_text(text)

        提取連線url,

        如<a href="http://www.kugou.com/song/o35k304.html" data-active="playDwn" data-
          index="0"  class="pc_temp_songname" title="火箭少女101 - 卡路里" 
          hidefocus="true">火箭少女101 - 卡路里</a>
        提取 href 可用  .find_element_by_link_text('火箭少女101 - 卡路里') ,若想點選連結後面
        加 .click()



    .find_element_by_partial_link_text(text)

        同上,只是 text 是取部分

 

3.元素等待機制

http://www.cnblogs.com/simple-free/p/8458361.html

 

4.