Selenium元素處理
阿新 • • 發佈:2018-11-25
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.