selenium 瀏覽器自動化2 - 同時調用selenium2
2018-05-29 本文已影响6人
Maliao
虛擬還境可將python的模塊依賴分開管理,能使用指定版本或避免衝突問題。
Selenium2
使用技巧:
- firefox 不須透過webdriver。
- 默認支持全屏幕截圖。
如何調用
-
建立虛擬環境 Selenium2 VEnv
安裝指定版本
pip install selenium==2.53.2
-
下載免安裝的firefox46.01
使用腳本
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2018-05-16 08:33:47
# @Author : Maliao
# @Link : None
from selenium import webdriver
from PIL import Image
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
from time import sleep
binary = FirefoxBinary(r".\FirefoxPortable\FirefoxPortable.exe") # firefox 主程序 檔案
profile = FirefoxProfile(r'.\FirefoxPortable\Data\profile') # firefox 使用者設定檔
browser = webdriver.Firefox(firefox_binary=binary, firefox_profile=profile)
browser.set_window_size(800, 900) # 指定窗口大小
# 依照元素大小截圖
def crop_screenshot(fullfile, cropfile, element):
browser.save_screenshot(fullfile)
if element:
type = element["type"]
name = element["name"]
imgelement = browser.find_element_by_xpath(".//*[@%s=%r]" % (type, name))
location = imgelement.location
size = imgelement.size
rangle = (int(location['x']), int(location['y']), int(
location['x'] + size['width']), int(location['y'] + size['height']))
i = Image.open(fullfile)
fincrop = i.crop(rangle)
fincrop.save(cropfile)
else:
pass
# 滾動窗口 加載所有圖片
def js_scroll_down(text):
jsdown = '''
(function () {
var y = 0;
var step = 100;
window.scroll(0, 0);
function f() {
if (y < document.body.scrollHeight) {
y += step;
window.scroll(0, y);
setTimeout(f, 100);
} else {
window.scroll(0, 0);
document.title += "%s";
}
}
setTimeout(f, 1000);
})();
''' % text
browser.execute_script(jsdown)
browser.get("https://www.ithome.com/html/android/360003.htm")
# 調用JS 下拉加載所有圖片
text = "SD"
js_scroll_down(text)
changetitle = "%s%s" % (browser.title, text)
while 1: # 死循環 等待js跑完
nowtitle = browser.title
if changetitle in nowtitle:
break
else:
sleep(1)
# 儲存 指定元素截圖
element = {"type": "class", "name": "post_content"}
cropfile = r"./data/ithome%s.png" % browser.current_url.split("/")[-1].split(".")[0]
fullfile = r"./data/ithomeCN.png"
crop_screenshot(fullfile=fullfile, cropfile=cropfile, element=element)
# 關閉瀏覽器
browser.quit()
截出一整張的長截圖。
imageselenium3
使用技巧:
- 支持最新版瀏覽器。
- 需使用webdriver驅動。
如何調用
-
建立虛擬環境 Selenium3 VEnv
安裝最新版本
pip install selenium
使用腳本
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2018-05-16 08:33:47
# @Author : Maliao
# @Link : None
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome() # 調用webdriver
browser.get("http://www.google.com")
browser.find_element_by_id("lst-ib").send_keys("python") # 搜索框輸入:"python"
browser.find_element_by_name("btnK").send_keys(Keys.ENTER) # 提交搜尋
titles = browser.find_elements_by_xpath(".//h3[@class='r']//a") # 搜尋所有標題
print([i.text for i in titles]) # 打印所有標題
browser.quit() # 離開瀏覽器
# 輸出:
['Welcome to Python.org', 'Python教程- 廖雪峰的官方网站', 'Python - 维基百科,自由的百科全书', 'Python 简介| 菜鸟教程', '教程一览| 莫烦Python', 'Python For Loops - W3Schools', 'Python Tutorial - W3Schools', 'Python - Attorneys at law – Geneva Switzerland Tokyo Brussels', 'Python Functions | DataCamp', '用Python 理財:打造小資族選股策略- Hahow 好學校']
小結:
操作上Chrome快速很多,而firefox雖然啟動比較慢,但不用webdriver及全屏截圖,實在相當便利。