打入中國市場,Hyundai選陸電池廠供混合動力車

南韓汽車製造商現代汽車(Hyundai Motor)首次選擇與中國電池製造商合作,由總部位於福建的寧德時代(CATL)為現代插電式混合動力車Sonata 提供電池,預計將在2018 年上半年打入中國市場。日經報導分析,這項合作是出於中國反外商情結的壓力。

日經新聞報導,隨著中國加緊推進新能源汽車應對空氣污染,中國政府正在研擬一項電動車份額草案,在中國市場上,外國汽車製造商必須讓電動車的銷量達到總銷售量的8%,若外商達不到指標,很有可能會被迫購買中國車商的積分,等於對中國車商提供經濟資助。先前草案規定2019 年將比率提升到10%,2020 年到12%,都被汽車製造商拒絕。

此外,中國政府為了幫助國內電池業者,規定必須通過中國的安全標準才符合補貼資格,東京的汽車製造商GLM 認為,未來很可能只有使用中國製造的電池的電動車才能在中國市場販售。GLM 準備在2019 年在中國市場推出4 人座跑車G4,號稱電動車的法拉利。

中國現在是全球最大的電動車市場,每年賣出30 萬台,中國政府最新的5 年計畫目標到2020 年一年增加到500 萬台。中國市場是現代汽車和起亞汽車在全球的最大市場,2016 年兩車廠在中國銷量佔全球整體銷量比率,分別為23.5% 和21.5%。

但這幾個月由於中韓兩國因美國設置反導系統引發政治動盪,使得現代汽車銷售受牽連,2017 年第一季中國零售銷售下滑14%,現代汽車準備在今年夏天啟用在重慶的第5 座中國工廠,銷售下滑對現代而言不是好消息。

CATL 是中國動力鋰電池龍頭,目標2020 年成為僅次於Tesla 與松下合資公司的全球第二大電動車電池供應商,最大股東為蘋果電池供應商日本TDK 集團,投資人中也包括鴻海。

根據現代官方說法,選擇CATL 作為第一個中國電池供應商,是現代尋求供應商多元化的策略之一。報導認為,與CATL 合作除了強化與中國政府的關係之外,也是為了避免中國突如其來的反外商政策對現代造成的衝擊。

(合作媒體:。圖片出處:Hyundai)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

Panasonic、AZAPA合作發展電動車設計優化軟體

日商Panasonic與AZAPA公司宣布將攜手合作,共同開發能加速電動車之動力系統的模擬軟體。此項合作已經獲得初步成果,未來可望大幅提高汽車與電動車的開發腳步。

Panasonic指出,為開發電動車,業界對於安全駕駛、汽車聯網功能、性能提升等面向均投注相當多的心血。為提高電動車在設計階段的效率,車商會運用一種被稱為「model-base」的模擬軟體,將電動車的驅動裝置、各項零組件模組化後進行軟體模擬,利用演算法來找出能最大化電動車驅動裝置運作力的設計。透過這種模擬軟體,車商在進行系統設計與開發時,所需的時間就可大幅縮短。

Panasonic表示,未來將與AZAPA共同發展能提高自動駕駛等技術之安全性、提高車內娛樂系統功能等不同需求的模擬軟體,並將參考日本經濟產業省的規劃,協助提高日本汽車產業的競爭力。

這樣的軟體也將幫助Panasonic了解各地電動車商所需的零組件性能,進而提供適合的產品,例如車載電池。

Panasonic希望在2018財年時,將汽車事業的銷售額提高到 2015財年的1.5倍。這項新軟體的發展,對於Panasonic在汽車與鋰電池方面的長期事業都可望帶來助益。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

亞馬遜水壩重大設計缺陷 危害人身安全和生物多樣性

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

江申中國廠獲Tesla訂單,營收增新動能

裕隆集團汽車零組件廠江申雖因國內景氣不佳,大型商用車、巴士需求平緩,致營收缺乏動能,但在中國大陸轉投資廠接單風光下,公司去年繳出稅後淨利大增2成的好成績,EPS 7.21元則改寫歷史新高紀錄;而今年第1季,雖然營收、獲利大致持平,但江申總經理麥少保表示,福州福享、廣州NTN和襄陽NTN今年均接單暢旺,尤其,廣州NTN還正式出貨美國電動車大廠特斯拉(Tesla) Model 3的轉動軸訂單,襄陽NTN也開始交瀋陽華晨寶馬,而福享也接到寧德能源的電動車電池盒訂單,將成為挹注今年業外成長的動能。

江申為裕隆集團旗下汽車零組件廠商,是台灣最大的大貨車架、巴士車架、以及小貨車車架、木床的供應商,公司18日參加集團法說會,由總經理麥少保說明今年度業績展望,其中,廣州NTN接獲特斯拉訂單成為法說會中的焦點。

由於江申營收僅反映台灣廠業績,但台灣廠的獲利佔比卻不及1成,逾9成的獲利主要來自轉投資大陸廠的收益,包括廣州NTN、襄陽NTN、福州福享、廈門金龍江申等;其中,光廣州NTN的獲利佔比在第1季達75%,是主要獲利重心,因此,法人在觀察江申展望時,多聚焦大陸廠接單情形。

江申第1季營收2.62億元、年增1.55%,毛利率9.48%、年減0.86個百分點,營業淨利98萬元、年減76.27%,業外淨利則為1.29億元、年增0.78%,稅前盈餘1.3億元、年減1.52%,稅後淨利1.33億元、年增1.53%,EPS 1.82元,優於去年同期的1.79元。

從江申的財報觀察,江申台灣廠第1季幾乎損平,獲利遭匯兌侵蝕;而廣州NTN貢獻9790萬元,年增23.89%;襄陽NTN貢獻2103萬元,年增36.74%;福享貢獻1452萬元,年減47.03%;廈門金龍江申則虧損428萬元,較去年同期的淨利230萬由盈轉虧。

麥少保說明,第1季來台的陸客減少,導致大巴士需求下滑,但江申營收有持平表現,是因為大客戶國瑞新導入日本Hino的底盤公車,並接獲新店客戶、桃園、新竹客運等訂單,對江申來說形成營收支撐;今年營收將平穩。

至於大陸轉投資部份,福州福享今年首季獲利衰退,主因去年有馬瑞利的模具收入,拉高獲利基期,若扣除該一次性收入來看,福享的本業獲利實際是成長的。

麥少保進一步表示,福州福享受惠於東南汽車推出SUV車的策略符合市場需求,DX7、DX3熱賣,接單明顯成長;再加上該廠也接福建奔馳訂單,在該品牌推出VS20廂型車款後賣得不錯,也成為今年動能。

值得留意的是,福州福享新接獲香港投資的電動車鋰電池大廠寧德新能源的電池盒訂單,麥少保預估,該業務將成為福享未來營運很重要的一環。該客戶訂單今年第1季佔比是5%,全年預估會佔5~10%。

最受關注的廣州NTN,麥少保則說,該廠的產能已達到40萬支/月的高峰,接單也不錯,主因東風日產的天籟、奇駿、SANTRA都賣得不錯,並持續有日產外銷訂單,雖然該廠有北京瑞韓現代訂單下滑影響,但由於外銷接單成長,因此該廠仍能維持成長。

他也首度證實,廣州NTN今年開始出貨Tesla Model 3傳動軸零件訂單,目前1個月訂單約為2萬個,並透露,只要是外銷訂單通常獲利都不錯。

而成長最大的襄陽NTN,則是因應廣州NTN產能不足而設,目前產能15萬支/月,年底目標18萬支/月。麥少保表示,4月起該廠正式交貨瀋陽華晨寶馬(BMW),同時也交廣州NTN交貨不足的天籟、奇駿車款,業績隨著擴產而有較大的動能。

不過,受到電動車騙補事件影響,廈門金龍今年首季繳出虧損成績單,麥少保也直言,大陸電動車很多人做,但今年普遍業績不好,今年該廠的業績將較去年差。

法人則預期,江申今年台灣廠營收將與過去2年相當,動能不強,但轉投資中國大陸在廣州NTN有訂單加入,襄陽NTN也因擴產、接單擴量,再加上福州福享有東南汽車DX7、DX3熱賣,可望使營運逐季增溫,下半年更優於上半年。

法人估,江申台灣營收將持穩,但大陸獲利成長下,全年獲利有機會較去年成長1成,EPS則有機會向8元扣關,再次創下史上最佳紀錄。

(本文內容由授權使用。圖片出處:Tesla)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

設計模式入門

最近想學設計模式,網上說 HeadFirst 設計模式書挺好的,我來此再鞏固一篇。

故事是這樣的:小明是一個剛畢業的小伙子,他來到了一個遊戲公司實習,項目經理分配了一個實習任務給小明:

設計一個遊戲角色,角色屬性包括(攻擊力,防禦力,敏捷度…等等),以及兩個召喚師技能(閃現和引燃)。

小明想這麼簡單的嗎,如是他用了一天的時間寫好了如下代碼

public class GameRole {
    
    private int atk; // 攻擊力
    private int def; // 防禦力
    private int dex; // 敏捷度
    
    public void flash_move() {
        System.out.println("指定方向瞬移一段距離");
    }
    
    public void ignite() {
        System.out.println("使其處於燃燒狀態 5 s");
    }
}

項目經理看到小明這麼快就完成了任務,表揚了一下小明,小明心裏樂開了花。然後項目經理又布置了一項任務給小明:
再設計兩個角色,他們的召喚師技能分別為(閃現,治療),(閃現,傳送)。

小明心想這難不倒我,然後他仍然只花了一天的時間就寫好了如下代碼:

public class GameRole {
    
    private int atk; // 攻擊力
    private int def; // 防禦力
    private int dex; // 敏捷度
    
    public void flash_move() {
        System.out.println("指定方向瞬移一段距離");
    }
    
    public void ignite() {
        System.out.println("使附近100碼內隊友恢復30%的血量");
    }
}

public class GameRole {
    
    private int atk; // 攻擊力
    private int def; // 防禦力
    private int dex; // 敏捷度
    
    public void flash_move() {
        System.out.println("指定方向瞬移一段距離");
    }
    
    public void ignite() {
        System.out.println("傳送至己方非英雄單位位置處");
    }
}

小明興高采烈的跑去給項目經理看了,項目經理看到小明過來了,心裏覺得這小伙子不錯麻,這麼快就做完了。

然後項目經理便看了他的代碼,這不看不要緊,一看便指着小明罵道:你真是一個糟糕的程序員!!!然後便讓小明改代碼去了。

小明此時還不太明白,我功能都實現了啊,沒啥毛病阿,然後小明不明所以的便問了辦公室的職員,職員告訴他,你代碼冗餘度太高了。

小明一看發現果然如此,然後便花了一天的時間改成如下代碼:

public abstract class GameRole {
    
    private int atk; // 攻擊力
    private int def; // 防禦力
    private int dex; // 敏捷度
  
  // 省略 Getter and Setter method
public void flash_move() { System.out.println("指定方向瞬移一段距離"); } public abstract void skill(); }
public class Role_One extends GameRole { @Override public void skill() { // TODO Auto-generated method stub System.out.println("使其處於燃燒狀態 5 s"); } }
public class Role_Two extends GameRole { @Override public void skill() { // TODO Auto-generated method stub System.out.println("使附近100碼內隊友恢復30%的血量"); } }
public class Role_Three extends GameRole { @Override public void skill() { // TODO Auto-generated method stub System.out.println("傳送至己方非英雄單位位置處"); } }

這次小明覺得冗餘度確實降低了,然後便給項目經理看,項目經理看后覺得確實還行,便又分配了一個任務:
(遊戲用戶希望能自由選擇召喚師技能就好了),所以任務是召喚師技能任意搭配。

小明心想:我寫的這種代碼似乎不用改耶,可以交差了,於是小明便偷懶了两天,然後便上報給項目經理了。

項目經理一看,這代碼沒有變化啊,便問小明,你代碼就這?小明回答是的,然後小明又被罵的狗血淋頭。

不明所以的小明又去問問辦公室的職員,你仔細想想,如果有100個(閃現,引燃),100個(閃現,治療),100個(傳送,治療)呢?

小明突然恍然大悟,那還是有好高的冗餘度啊,經過三天思考後,小明想出了最終答案:

public abstract class GameRole {
private int atk; // 攻擊力 private int def; // 防禦力 private int dex; // 敏捷度 private Skills skill_One; private Skills skill_Two;
  // 省略 Getter and Setter method
} public class Role_Demo extends GameRole { }
public interface Skills {
    public void skill();
}

public class Flush_Move implements Skills {
    @Override
    public void skill() {
        // TODO Auto-generated method stub
        System.out.println("指定方向瞬移一段距離");
    }
}

public class Ignite implements Skills {
    @Override
    public void skill() {
        // TODO Auto-generated method stub
        System.out.println("使其處於燃燒狀態 5 s");
    }
}

public class Treat implements Skills {

    @Override
    public void skill() {
        // TODO Auto-generated method stub
        System.out.println("使附近100碼內隊友恢復30%的血量");
    }
}
public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Role_Demo role = new Role_Demo();
        role.setSkill_One(new Flush_Move());
        role.setSkill_Two(new Ignite());
        role.getSkill_One().skill();
        role.getSkill_Two().skill();
    }
}

小明寫完了,這次小明怕又被罵,便去問問職員小花了,小花說寫的不錯嗎,於是小明膽戰心驚的去交差了。

項目經理看到小明過來,看着小明的囧樣,內心是想笑的,然後看了看代碼發現這回沒啥問題了,便放心的交給它最後一個任務:

給每個英雄添加四個不相同的技能:

小明經過幾次寫代碼的經歷后,一天便寫出來了:

public abstract class GameRole {
    private int atk; // 攻擊力
    private int def; // 防禦力
    private int dex; // 敏捷度
    private Skills skill_One;
    private Skills skill_Two;
    
    // 省略 Getter and Setter method
    
    public abstract void Skill_One();
    public abstract void Skill_Two();
    public abstract void Skill_Three();
    public abstract void Skill_Four();
}

public class Role_Demo extends GameRole {

    @Override
    public void Skill_One() {
        // TODO Auto-generated method stub
    }

    @Override
    public void Skill_Two() {
        // TODO Auto-generated method stub    
    }

    @Override
    public void Skill_Three() {
        // TODO Auto-generated method stub    
    }

    @Override
    public void Skill_Four() {
        // TODO Auto-generated method stub    
    }
}

經過這幾次任務,小明感覺寫的代碼更漂亮,更優雅了,腰也不酸了,背也不疼了。小明上交任務后,項目經理也露出了滿意的笑容!

最後,小明成功通過了實習,然而項目經理給他分配了下一項任務……

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準

一文搞懂:Adaboost及手推算法案例

boosting

Boosting 算法的特點在於:將表現一般的弱分類器通過組合變成更好的模型。代表自然就是我們的隨即森林了。

GBDT和Adaboost是boost算法中比較常見的兩種,這裏主要講解Adaboost。

Adaboost

Adaboost算法的核心就是兩個權重。對於數據有一個權重,權重大的數據計算的損失就大;然後對於每一個弱分類器有一個權重,這個權重就是每一個弱分類器最終投票的比重。

【先給出Adaboost關鍵的公式】
\(\alpha_1=\frac{1}{2}ln(\frac{1-\epsilon_1}{\epsilon_1})\) 分類器的投票權重
\(W_i=W_ie^{-\alpha_i y_i \hat{h}(x_i)}\) 更新樣本的權重

【隨即森林中最終投票每一個弱分類器的比重相同】

大概流程就是,現在有一個數據集,然後每個數據的比重都相同,然後訓練了好幾個不同的弱分類器。

  1. 挑選錯誤率最低的弱分類器,然後通過【某種算法】得到這個弱分類器最終投票的比重,然後通過【某種算法】更新每一個數據的比重;
  2. 因為每一個數據的比重更新了,所以再選擇一個錯誤率最低的弱分類器,然後通過【某種算法】得到這個弱分類器最終投票的比重,然後通過【某種算法】更新每一個數據的比重;
  3. 重複這個過程。

算法的流程:

這裏給一個具體計算的例子:
假設這裡有10個數據:

加號和減號分別代表不同的類別。然後每個類別有5個樣本。

下面會給出3個弱分類器:

這三個分類器分別是\(h_1(x),h_2(x),h_3(x)\)
圖中畫圈的數據就是分類錯誤的數據。可以發現每個弱分類器都分錯了3個。下面開始Adaboost的算法。

先計算三個弱分類器的錯誤率,因為一開始每個樣本的權重都是0.1,每個分類器又都錯了3個樣本,所以錯誤率都是0.3。這裏就隨機選取第一個分類器作為錯誤率最低的那個好了。
我們這裏通過第一個【某種算法】計算第一個弱分類器在最終的投票權重:
\(\alpha_1=\frac{1}{2}ln(\frac{1-\epsilon_1}{\epsilon_1})=0.5*ln(\frac{0.7}{0.3})=0.4236\)

然後通過這個\(\alpha_1=0.4236\)來更新每一個樣本的權重。這也就是上面提到的第二個【某種算法】:
\(W(i)=W(i)*e^{-\alpha y_i \hat {h}(x_i)}\)

這啥意思的,現在假設第一個樣本+1,這個樣本的權重是0.1(更新前),然後這個樣本在第一個分類器中是非類正確的,所以\(y_i \hat{h}(x_i)=1\),所以這個樣本更新后的權重就是\(0.1e^{-0.4236}=0.0655\)

當然,對於+3這個樣本,第一個分類器就分類錯誤,所以\(y_i \hat{h}(x_i)=-1\),所以呢這個樣本更新后的權重就是:\(0.1e^{0.4236}=0.1527\)

下面經過第一個分類器之後的樣本的權重:

然後再計算每一個分類器的基於更新之後樣本權重的錯誤率:

這一次選的是第二個分類器,然後計算它的\(\alpha_2\),然後再更新每一個樣本的權重值:

然後是再尋找錯誤率最低的分類器:

到這一步的時候,我們已經有了\(\alpha_1,\alpha_2,\alpha_3\),所以我們的adaboost已經得到了所有分類器的投票權重,所以最終的模型投票公式就是:

喜歡的話請關注我們的微信公眾號~【你好世界煉丹師】。

  • 公眾號主要講統計學,數據科學,機器學習,深度學習,以及一些參加Kaggle競賽的經驗。
  • 公眾號內容建議作為課後的一些相關知識的補充,飯後甜點。
  • 此外,為了不過多打擾,公眾號每周推送一次,每次4~6篇精選文章。

微信搜索公眾號:你好世界煉丹師。期待您的關注。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

※教你寫出一流的銷售文案?

.NET Core Hangfire周期性作業調度問題

前言

四月中旬Hangfire團隊發布了1.7.11版本,在使用周期性作業調度過程中發現一個問題,這個問題應該一直未解決,故做此記錄,希望遇到的童鞋根據項目業務而避開這個問題。

周期性作業調度

我們依然是在控制台中進行測試,下載所需包請參考官方文檔,這裏不再敘述,首先我們在內存中存儲數據,如下:

var storageOpts = new MemoryStorageOptions();

GlobalConfiguration.Configuration.UseMemoryStorage(storageOpts);

using var server = new BackgroundJobServer();

RecurringJob.AddOrUpdate("job1", () => Print1(), "*/10 * * * * *", TimeZoneInfo.Local);

RecurringJob.AddOrUpdate("job2", () => Print2(), "*/10 * * * * *", TimeZoneInfo.Local);

RecurringJob.AddOrUpdate("job3", () => Print3(), "*/10 * * * * *", TimeZoneInfo.Local);
public static void Print1()
{
    Console.WriteLine("start1");
}

public static void Print2()
{
    Console.WriteLine("start2");
}

public static void Print3()
{
    Console.WriteLine("start3");
}

Hangfire已支持秒級(1.7+)周期作業調度,如上代碼,我們每隔10秒執行上述3個作業,打印如下:

 

基於內存存儲間隔10秒執行對應作業,根據上述打印結果來看沒有問題,接下來我們使用SQLite來存儲作業數據看看,首先下載Hangfire.SQLite包,針對控制台需進行如下配置

GlobalConfiguration.Configuration.UseSQLiteStorage("Data Source=./hangfire.db;");

當我們啟動控制台時一定會拋出如下異常,其異常旨在表明需要SQLite驅動

我們去下載微軟官方針對SQLite的驅動(Microsoft.Data.Sqlite)

 接下來我們將發現對於每一個作業都會重複執行多次,如下:

猜測只會在SQLite數據庫中才會存在問題吧,為了解決這個問題,做了一點點嘗試,但還是無法從根本上完全解決,我們知道Hangfire服務的默認工作數量為當前機器的處理器數量乘以5即(Environment.ProcessorCount * 5),那麼我們嘗試給1是不是可以規避這個問題

var options = new BackgroundJobServerOptions()
{
    WorkerCount = 1
};

using var server = new BackgroundJobServer(options);

 

上述設置后,我們可以看到貌似只執行了一次,但是這種情況還是是隨機的並不靠譜,比如多執行幾次看看,會出現如下可能情況

 

沒招了,找了下官方issue列表,發現此問題(https://github.com/mobydi/Hangfire.Sqlite/issues/2)一直處於打開狀態並未得到解決,所以要麼看看能否根據項目業務規避這個問題或者下載源碼自行調試解決

總結

本文是在使用Hangfire過程中發現SQLite數據庫出現的問題,因針對Hangfire的SQLite具體實現並不是官方團隊所提供,所以暫不能確定到底是Hangfire.SQLite包提供者的問題,根據issue描述大概率是Hangfire的一個bug,希望在SQLite存儲作業等數據存在的問題引起使用者注意。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準

selenium自動化操作

在前面爬蟲的相關介紹中,我們介紹了如何抓取靜態頁面信息。但是,在實際的網頁瀏覽過程中,我們可能會經常碰到各種需要進行交互的操作,典型的如輸入信息、點擊按鈕之類。

對於這種場景,之前的靜態頁面操作方式已經不能滿足需求,這時我們需要藉助新的工具,比如selenium或者PhantomJS。由於後者已經停止維護,推薦使用前者。

1.selenium是什麼

如果大家有做過web的自動化測試,相信對於selenium一定不陌生,測試人員經常使用它來進行自動化測試。

selenium最初是一個自動化web測試工具,通過代碼模擬人使用瀏覽器自動訪問目標站點並操作,比如跳轉、輸入、點擊、下拉等。

由於開發者的不斷完善,目前的功能越來越強大,基本支持各種交互操作。同時,不止支持有界瀏覽,還支持無界瀏覽。

2.selenium有什麼用

正如我們前面講過的,爬蟲的本質過程就是模擬人對瀏覽器的操作過程。在爬蟲中使用,selenium主要是為了解決requests無法執行javaScript代碼的問題。

本質上是通過驅動瀏覽器,完全模擬瀏覽的操作,比如跳轉、輸入、點擊、下拉等…進而進行跳轉。

當然,它也有壞處,主要的壞處就是它的速度比較慢。原因是selenium在操作時,需要等瀏覽器對頁面的元素渲染好之後才能操作。而我們知道,由於頁面渲染過程需要加載各種資源,響應速度與網絡帶寬要求非常高。通常情況,它比靜態頁面的響應至少慢一個數量級。

3.如何使用selenium

在知道selenium是什麼以及有什麼用之後,我們來具體學習如何操作這個工具。

由於selenium本質是模擬人對瀏覽器進行輸入、選擇、點擊等操作,因此對於目標標籤的定位非常重要。

在前面的章節,我們對於如何定位目標標籤有過詳細的介紹,這裏就不再贅述。selenium對於目標標籤定位的方式本質與靜態的頁面一樣,只不過因為使用的包不同,因此在beautifulSoup中使用的是find和findAll,而在selenium中使用的接口有所變化。

下圖中已對各種定位方式進行了歸納總結:

在找到目標標籤之後,最重要的是對這些標籤進行模擬操作。Selenium庫下webdriver模塊常用方法主要分類兩類:一類是模擬瀏覽器、鍵盤操作,另一類是模擬鼠標操作。

3.1模擬瀏覽器、鍵盤操作

模擬瀏覽器、鍵盤操作的方法歸納如下:

3.2 模擬鼠標操作

模擬鼠標操作的方法歸納如下:

4.示例演示

在介紹了selenium相關的使用方法之後,我們來進行操作。這裏介紹兩個例子:第一個例子是模擬百度搜索,第二個例子是模擬自動登錄網易163郵箱發送郵件。

在開始示例之前我們需要安裝selinum插件包,同時還需要下載webdriver。在我們的示例中,需要是使用chrome瀏覽器進行操作,需要使用瀏覽器的驅動webdriver。

關於下載什麼版本的webdriver,可以在瀏覽器的屬性中查看,並在http://npm.taobao.org/mirrors/chromedriver/下載對應的版本就好,如果是其他的瀏覽器,則需要下載對應的瀏覽器驅動程序,這種不再做進一步介紹。

4.1模擬百度搜索

第一步還是需要打開目標的地址“w w w.baidu.com”,分析目標網頁中目標元素的特點,如下圖所示:

通過分析,我們很容易就找到搜索框的id為kw,點擊按鈕的id為su,餘下的就是使用方法進行模擬。

實現的代碼如下所示:

from selenium import webdriver

#get 方法 打開指定網址
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')

#選擇網頁元素
element_keyword = driver.find_element_by_id('kw')

#輸入字符
element_keyword.send_keys('python 爬蟲')

#找到搜索按鈕
element_search_button = driver.find_element_by_id('su')
element_search_button.click()

driver.close()

4.2模擬自動登錄網易163郵箱發送郵件

操作過程跟上面相似,第一步也是分析目標網頁http://mail.163.com。

如下圖所示:

找到了目標標籤然後就是模擬登錄。

實現代碼如下:

# coding:UTF-8
import time
from selenium.webdriver.common.keys import Keys
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(5)  
driver.get('http://mail.163.com/')
driver.switch_to_frame(driver.find_element_by_tag_name('iframe'))
# driver.switch_to_frame('x-URS-iframe')  
driver.find_element_by_name('email').clear()
driver.find_element_by_name('email').send_keys('郵箱地址')
driver.find_element_by_name('password').send_keys('郵箱密碼', Keys.ENTER)
# 跳轉頁面時,強制等待6s
time.sleep(6)   
# 點擊寫信按鈕
driver.find_element_by_xpath("//div[@id='dvNavTop']/ul/li[2]/span[2]").click()   
time.sleep(2)
# 收件人
driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys('目標的郵箱')  
driver.find_element_by_xpath("//input[@class='nui-ipt-input' and @type='text' and @maxlength='256']").send_keys(
    u'測試')   # 主題
xpath = driver.find_element_by_xpath("//div[@class='APP-editor-edtr']/iframe")
# 文本內容在iframe中
driver.switch_to_frame(xpath)   
driver.find_element_by_xpath("//body[@class='nui-scroll' and @contenteditable='true']").send_keys(u'這是一個自動化測試郵件')
# 發送按鈕在iframe外,所以需要跳出
driver.switch_to_default_content()
# 發送
driver.find_element_by_xpath("//div[@class='nui-toolbar-item']/div/span[2]").click()  
driver.close()

當然,在實際過程中,可能往往還有驗證碼的驗證。因為現在的驗證碼難度越來越大,形式也多種多樣,使用常規的方法很難解決,必須藉助機器學習或者第三方接口進行實現,將在後續單獨列一個章節進行介紹如何破解驗證碼。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

※教你寫出一流的銷售文案?

南極「頰紋企鵝」 半世紀數量減少七成七

摘錄自2020年2月12日公視報導

美國生物學家最近在南極調查發現,當地常見的一種「頰紋企鵝」,數量比50年前大幅銳減了七成七。科學家指出,南極溫度在過去2、30年間上升了5°C。而冰棚快速融解崩塌,讓企鵝失去原本的棲息地,食物供應也大受影響。

保育生物學家佛瑞斯特表示,「我們認為這裡基礎食物鏈的建構出了問題,有可能是浮游生物或是磷蝦減少,食物不如以往充足,導致企鵝數量不斷減少。問題在於這種情況會不會持續惡化。」

頰紋企鵝、皇帝企鵝和國王企鵝,數量都在急劇減少,這也意味著生態的多樣性與豐富性正遭遇巨大衝擊。環保團體呼籲聯合國在2030年之前,將全球30%的海域列為保護區,因為目前只有4%受到保護實在太少。而從目前企鵝數量銳減的情況看來,將南極海域列為保護區已經刻不容緩。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準

蒙特婁公約奏效 臭氧層破洞縮小 南半球大氣樣態漸修復

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

※教你寫出一流的銷售文案?