Showing posts with label Python. Show all posts
Showing posts with label Python. Show all posts

Wednesday, October 17, 2018

Python - Open a new Tab instead of new Window with Selenium with Firefox in Python

Pretty crazy to work with multi-tab in Firefox with Selenium and here is some tips...
  1. locate webdriver_prefs.json under \\python_path\Lib\site-packages\selenium\
  2. set "browser.link.open_newwindow" from 2 to 3
  3. save before exit.
In program code, I did try using send_keys(Keys.CONTROL + 't') but it didn't succeed.
from selenium.webdriver.common.keys import Keys
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')
You have to use javascript to call a new 'window'(tab) and then switch the current 'window'(tab) to newly created 'window'(tab)
driver.execute_script("window.open()")
driver.switch_to.window(driver.window_handles[-1])
After all the operation, you can close the newly created 'windows'(tab)
driver.close()
Remember, once you close the current 'window'(tab), you have to switch the 'window'(tab) back to first one(or another one) to access 'driver' or you will get an error saying the content has been dropped.
driver.switch_to.window(driver.window_handles[0])
A note for myself and for whom it may be interested in

Thursday, October 11, 2018

Python - 學會了 data scraping

Data Scraping 意思指從網路上獲取數據,而我o既玩法差唔多係等如 WYSIWYG。

本來要用 browser 逐條 link click 入去先睇到,家陣原來啲 programming 好很方便,有齊晒 module 俾你 remote control 一個 browser 去瀏覽網站,繼而透過獲取返嚟o既 HTML 再做分析,只抽取有用的部分為己用。而當中有一個叫 Selenium o既 package,佢可以好有效咁抽取 HTML 中的某啲 element(s),咁喺個 program 入邊做咩都得喇。

最過癮o既地方係,佢可以模擬返你瀏覽o既動作去 click,入 username 或者 password,針對動態改變o既內容網站就得心應手。如果只針對靜態網站,我估用 beautifulsoup 可能會仲快手啲。

我o既用途除咗想 scrap 吓 craigslist 之外,仲想 download 翻報紙啲文章留為己用。

真係比我整到個小 program 喎,好過癮。

Friday, September 28, 2018

發噏瘋 - 孤獨的 python 新手 - Metra alert message + Python + Telegram bot

以前睇過啲疑似成功人士o既分享。佢地話,要成為成功人士o既首要條件,係要克服孤獨感。而我理解為習慣孤獨感。

又有個小故事同大家分享。

話說小弟家陣要日日坐火車。oh, wait a minute, to be precise,係差不多日日搭火車先啱,因為有時我係會揸車返工,正所謂:有得揀,先至係老闆。但我選擇揸車而唔坐火車有三個可能性,一、有需要,可能要早走或者放工後要去別處,無車返唔到屋企;二、火車 delay,因為未上前已知道火車 delay 的話,我會選擇直接開車返工而費事同佢癲,呢度塞火車唔係人咁品。早兩日就因為突然 severe thunderstorm 吹冧咗棵樹,downed tree on track。咁我就坐咗喺架火車度三粒鍾。。。五點十分上車,八點半先返到屋企。痴線。。。三、心情唔好,係呀,心情唔就要開車去舒緩一下情緒。

由於火車會因種不同原因 delay,咁你係要周不時去火車公司個網頁去留意佢有咩資訊發佈,了解下發生咩事。其實你上咗火車之後,了解嚟都無咩叉用,就好似肉隨砧板上咁,無埋站你係落唔到車。你啲資訊好多時都話你聽 delay duration 係 unknown。同埋即使話過你聽 delay 10min.,過咗廿分鐘後佢可以出個 update 話要 delay 15min.。但明明過左廿分鐘,你先話會 delay 15min. 咁即係講嚟都多餘喇都唔準。同時又即係好似隧道啲廣播一樣,話你知隧道內交通暢通或者交通擠塞一樣:我開緊車,唔通我唔知道佢係擠塞定暢通咩?你話咗知擠塞對事情都無咩幫助o架啦,唔通你話咗我知會即刻暢通翻?唔會吖嘛!嗱,講翻正題,為咗係上火車前了解下火車有無已經 delay,你可以選擇去 metrarail.com 去睇下有無咩 alert message。但我成日都好討厭喺電話度睇網頁,加上佢個網又多 script,load 起上嚟好L慢,所以萌生起一個想法,我可唔可以寫個小 program 去淨係 capture 佢 alert message 啲訊息然後再 send 個 notification 俾自己呢?咁就開始咗我呢個 programming 小 project。

呢次我就係用 python。貪佢簡單易學多 api 同埋古天樂名曲—今期流行。整整下,就變由原本諗住每隔十五分鐘 check 一下,如果有新嘢就通知我,變成我要去 trigger 一下先去睇下有無更新。因為個做法好似會容易啲同埋實際啲,你諗下,好多時都係你去緊坐火車嗰時,即返工放工嗰下,同埋,坐緊嗰下想睇下有無 alert,其餘時間話之你停駛都唔關我事,無謂不斷 polling 即係垃圾訊息。所以方式就改變咗,跟手就再 twist 到利 telegram 去做呢個 solution。

玩咗三個禮拜,終於叫做搞掂用得。

做完之後就好似好失落唔知做咩好。分享俾人聽都好似無人想聽、聽得明或者覺得有興趣咁。就連寫 program 遇到困難想問下有咩 approach 去解決好都好似同樹洞講嘢咁,無人想/識/有經驗去答你。唉,感覺好孤單,好似呢個世界都無呢個需要,只係自己多多事幹,嫌三嫌四o既廢中(頹廢中年)咁。。。

今次都有啲得著。
一、就係需求主導,當你有嘢覺得唔方便,而你又有心想解決,就會有動力想去整啲嘢,就算唔識都會學到識。漫無目的無 mission 去學一樣但又無用的好飄渺,好難學得好。
二、不斷修正,起初諗o既 idea 其實同成品係有啲偏差,係成個 methodology 唔同咗,因為現成有啲簡單啲o既 solution 而同時間做到差唔多o既效果,何樂而不為?
三、認清需求,諗真啲你想要啲咩,無論你所以的資訊、次數。
四、平台,我今次用咗 telegram,係因為我有,加上網路上啲人又話好易整個 telegram o既 bot,所以就揀咗佢。但後來發現,原來 telegram 無我想像中流行,周圍問人十個先得一兩個有用 telegram,好彩唔係用嚟搵錢,唔係就中伏了。

成個小 project 完成後,發個成個過程終都係自己搞掂,做完又係自己用,感覺好很宅。。。即刻有莫名o既孤獨感。為咗要成為成功人士,就等我慢慢習慣佢啦。(白痴,咁呢個世界上大把成功人士啦)

下次有機會介紹下用 python 加 telegram bot 去做到我想要O既 message alert。

廢噏完畢。

Tuesday, June 26, 2018

Python Plot pandas dataframe from pandas_datareader

話說心血來潮,呢期又試玩翻 programming。原來 ruby 話咁快又唔興喇。所以揀咗 Python。

呢次個 target 係想用 Python 去分析股票,真係由零開始。攞 data 已經叫做無問題,pandas_datareader 就會幫到你。之後就想 plot 個 graph 出嚟睇下,點知就有價無日期標示,即係無咗 x-axis 個 label。搞咗差不多兩日,先知道原來 pd.index 係唔得o既,因為佢係個 pandas_datareader 攞翻嚟然後 generate 個 dataframe 係屬於 multi-index。正因為呢個 multi-index 搞到個 pyplot 唔知你個 x-axis 係咩料,所以就會無晒標示。

搞咗一大輪,先上網搵到個叫做 get_level_values() 先攞到個日期。pd.get_level_values('Date') 就 ok。

特此一記。