Selenium – This version of ChromeDriver only supports Chrome version 85 error on Ubuntu

I use Selenium web driver to scrap some website data that I need for my property analysis. In this case I use chromedriver.

When I want to run it after I upgraded my Chrome browser on Ubuntu I found this error.

This version of ChromeDriver only supports Chrome version 85 

My steps to resolve this

1) Check my Chrome browser version and found it is 87.

google browser version
google browser version

2) Check my chromedriver version by typing

chromedriver --v
ubuntu check chromedriver version
ubuntu check chromedriver version

I found my version is 85 not same as my browser.

3) Check the location of the chrome driver by typing

echo $PATH

In my case I found my chrome driver at /usr/local/sbin

chrome driver location on ubuntu
chrome driver location on ubuntu

4) Download the latest chromedriver at Google ChromeDriver Website

5) After extracting the latest chromedriver, replace the old one.

mv [latest chromedriver file] [location of current chromedriver]
ubuntu replace old chromedriver
ubuntu replace old chromedriver

Then when I run back my program, it works!

World Biggest Technology Companies by Countries

I want to compare which countries have the most influence in technology. So I did my studies based on world biggest technology companies.

world biggest technology companies
world biggest technology companies

US still dominates technology with 50% of world biggest technology companies come from this country.

Followed by Japan (3), China (2), South Korea (2) and Taiwan (1).

From Y2018 to Y2019, number of companies from each country remains the same but China technology companies share in term of revenue increase marginally by 0.91% at the expenses of South Korea and the United States.

Besides, only US represents the Western countries which have biggest technology companies while the rest are all from Far East.


Wikipedia – World Biggest Technology Companies

Surat Rayuan Pengurangan Cukai Taksiran Majlis Perbandaran

Saya amat terkejut dengan kadar cukai taksiran di Bentong sebanyak RM1,077.30 setahun untuk sebuah kondominium bersaiz 818 kaki persegi.

Ianya amatlah mahal jika dibandingkan dengan kadar cukai taksiran di Shah Alam di mana rumah teres hanyalah RM280.80.

Disertakan contoh surat bantahan cukai taksiran untuk mereka yang ingin menyerahkan bantahan kepada mana-mana majlis perbandaran.

Contoh Surat Bantahan Cukai Taksiran

contoh surat bantahan cukai taksiran majlis perbandaran
contoh surat bantahan cukai taksiran majlis perbandaran

Klik sini untuk contoh dalam PDF surat bantahan cukai taksiran Majlis Perbandaran.

Proses Bantahan

  1. Majlis Perbandaran akan menghantar surat kepada pemilik mengenai kadar cukai taksiran yang dikenakan.
  2. Pemilik hendaklah menghantar surat bantahan kepada Majlis Perbandaran
  3. Menghadiri sesi bantahan dan menerangkan dari segi fakta kenapa pemilik menganggap cukai taksiran adalah tinggi seperti perbandingan dengan Majlis Perbandaran yang lain.
  4. Majlis Perbandaran akan menggunakan akta kerajaan negeri tempatan untuk mempertahankan kadar cukai taksiran yang diberi.
  5. Majlis Perbandaran akan menghantar surat mengenai pengurangan atau mengekalkan kadar cukai taksiran selepas sesi bantahan tersebut.
  6. Jika Majlis Perbandaran telah menghantar bil cukai taksiran  anda hendaklah membayar terlebih dahulu.Jika bantahan cukai taksiran berjaya, Majlis Perbandaran akan mengubah dan mengambil kira bayaran yang terlebih untuk bayaran bil akan datang.

Pengalaman Menghadiri Sesi Bantahan Cukai Taksiran Majlis Perbandaran Bentong pada 23 September 2020

sesi bantahan cukai taksiran majlis perbandaran bentong 23 september 2020
sesi bantahan cukai taksiran majlis perbandaran bentong 23 september 2020
cukai taksiran majlis perbadaran bentong 2020
cukai taksiran majlis perbadaran bentong 2020

Majlis Perbandaran Bentong masih membenarkan pemilik untuk hadir sesi bantahan walaupun tidak menghantar surat. Cukup hanya menghantar email sebelum sesi bermula.

Sesi dimulakan dengan pengenalan kepada ahli-ahli majlis perbandaran yang hadir untuk mendengar sesi bantahan.

Pemilik menerangkan kenapa kadar cukai taksiran dianggap tinggi:

  • Perbandingan dengan kadar cukai taksiran Majlis Perbandaran yang lain
  • Fakta yang berkaitan dengan peribadi contoh telah  bersara, kos hidup yang tinggi.
  • Skop kerja Majlis Perbandaran tidak banyak terutama untuk kondomium di mana kebersihan kawasan dan landscaping diuruskan sendiri oleh JMB.

Majlis Perbandaran akan mempertahankan kadar cukai taksiran berdasarkan akta kerajaan negeri tempatan yang telah diluluskan di mana cukai taksiran dikira berdasarkan kadar dan harga rumah.




Programmers Quadrant or Software Developers Quadrant

I created the Programmers Quadrant to make my software developers team aware of their current skills position.

With the quadrant,  a programmer can easily visualize where are they now in term of skills.

The quadrant has Data Structure and Algorithm as its vertical axis. While Reusable Codes as it horizontal axis.

This programmers quadrant is only for someone who knows to code already. If he is still learning, he won’t be categorized under this quadrant.

Data Structure and Algorithm Vertical Axis

This axis represents how good a programmer regarding data structure or algorithm.

The better he is the higher he can go into the axis.

Given a set of requirements, a programmer must be able to identify the best data structure and algorithm to solve the requirements.

Reusable Codes Horizontal Axis

This axis how good a programmer in making a reusable codes instead of hard coded to a specific application.

A person who has good knowledge on object oriented programming, design pattern, best coding practice and follows naming convention standard.

4 Programmers Quadrants

#1 – Einstein Coder

A programmer who is very good in data structure and algorithm but at same time can produce reusable codes.

#2 – Genius Code

A programmer who can create or know what is the best data structure or algorithm to be used but his code is hard coded.

#3 – Engineer Coder

A programmer who most of the time uses third party library or technology to make its application and the code produced is reusable and easily readable.

#4 – Frankenstein Coder

A programmer who use third party library, can make an application works but he produces hard coded application and not reusable for other application and not easily readable.

Kangaroo Math Year 2020 Result

I encouraged Aliesha and Hadeef joined Kangaroo Math Competition (KMC). I want to give them exposure on problem solving and develop their interest in Math.

Based on Kangaroo Math website the result is categorized as below:

The allocation of percentage for participants in KMC is as follows:

Top 10% of participants from each category are the MEDALISTS.
From here, the top 1.3% will receive GOLD MEDAL, the next 3.3% will receive SILVER MEDAL and the remaining 5.4% will receive BRONZE MEDAL. Students wil also be awarded with certificates.

The next 40% of participants are the receivers of HONORABLE MENTION certificates.
The remaining 50% will receive the certificate of PARTICIPATION.

Grand Prix Award are rewarded to Gold Medalist students who scored the highest mark from each category.
Congratulations to all winners!

Aliesha’s Kangaroo Math Result:

Y2020 (Benjamin) – Honorable Mention
Y2019 (Ecolier) – Honorable Mention
Y2018 (Ecolier) – Honorable Mention

kangaroo math result Y2020 honorable mention aliesha
kangaroo math result Y2020 honorable mention aliesha

Hadeef’s Kangaroo Math Result:

Y2020 (Ecolier) – Honorable Mention
Y2019 (Ecolier) – Certificate of Participation
Y2018 (Ecolier) – Didn’t join

kangaroo math result Y2020 honorable mention hadeef
kangaroo math result Y2020 honorable mention hadeef

Full Results of KMC 2020

Majlis Perbandaran Bentong Submit General Complaint

I was looking to submit my road complaint from Majlis Perbandaran Bentong, Pahang website. I just found its email but after sending email, no reply from them.

Fortunately someone informed me that all local council use SISPAA (Sistem Pengurusan Aduan Awam) to submit any complaint to local council.

For Majlis Perbandaran Bentong, you can submit your complaint here:

Majlis Perbandaran Bentong SISPAA – Submit General Complaint

majlis perbandaran bentong submit general complaint
majlis perbandaran bentong submit general complaint

To check your complaint status:

Majlis Perbandaran Bentong SISPAA – Check Complain Status

majlis perbandaran bentong check complaint status
majlis perbandaran bentong check complaint status

The good thing is, MPB does update the complaint status.

majlis perbandaran bentong update complaint status
majlis perbandaran bentong update complaint status

MCO & Property Auctions

I posted this article because I think it is very useful for my consideration to buy property auction during MCO.


IN light of the Covid-19-triggered movement control order (MCO) imposed on March 18 and still continuing, numerous transactions were affected. I am writing in particular about the sale of auctioned properties that was due to be completed during the MCO period.

Land offices and law firms were not allowed to operate during the earlier phases of the MCO. This meant private caveats could not be lodged, and balance purchase prices could not be paid.

In an Ipoh High Court case, a successful bidder from a public auction sought an extension of time to complete the sale. The last date to pay the balance purchase price fell during the MCO period, on May 6. The bidder argued that he would be greatly prejudiced if held responsible for the non-performance of the obligation given that the MCO was beyond the control of the parties, making the performance of obligations impossible.

Further, the 10% reserve price he paid would be forfeited if the balance purchase price was not paid within the stipulated 120 days, as per 257(1)(g) of the National Land Code 1965. He argued that the MCO had the effect of robbing him of 50 days from the 120 days allowed to complete the purchase.

In dealing with this, the High Court examined the intent of Parliament behind 257(1)(g). The court held that the said section was enacted to protect the interest of the chargor and to prevent any non-

serious bidder from participating in auctions. Simply put, both the interest of the chargor and the chargee must be safeguarded. Both parties must be afforded the right to be heard.

In the Ipoh case, the court recognised that it is indeed unfortunate that the successful bidder was placed in this predicament through no fault of his own, i.e. the imposition of the MCO. Additionally, there are no legislative provisions to deal with situations caused solely by the restrictions of the MCO.

However, the application for extension of time was not allowed. The court ultimately found that the bank and chargor’s interests were not safeguarded.

Why? Here are some of the key takeaway points that others in the same position should note.

As a successful bidder, you must show the following:

1. That you are willing and able to pay the balance purchase price, in that you obtained a bank loan before the expiry date. This has to be apparent in your affidavit in support. This was shown in the Ipoh case.

2. That the cause papers are served on the chargor. This is important because the chargor has the right to be heard in a request for extension of time, and for the chargor to be heard in court, he must be given notice of the proceedings. As such, the cause papers must be served on the chargor and an affidavit of service must be filed to show this is done. This was not done in the Ipoh case.

3. That you are prepared to pay the interest imposed on the chargor’s account during the period of extension sought. This was not done in the Ipoh case.

Basically, you must show that the interests of the bank and the chargor have been safeguarded.

From the bank’s point of view, in the event a successful bidder seeks an extension of time to complete the sale, it would be prudent to consider imposing these conditions before agreeing to the extension:

1. The successful bidder must have the chargor’s consent for the extension of time sought.

2. Interest must be imposed on the chargor’s account after the completion date, to be paid by the successful bidder.

3. The successful bidder must undertake to indemnify the bank

if any legal action is taken against the bank if the sale is set aside due to the time extension sought.

However, do note that these are considerations applied before the Temporary Measures for Reducing the Impact of Coronavirus Disease 2019 Bill 2020 was passed by Parliament on Aug 25. The courts’ approach to a similar circumstance may change once the Bill comes into force. We anticipate that this Bill will reconcile the gap between dealing with circumstances caused solely by the MCO and compliance with mandatory legislative provisions, like s.257(1)(g) of the National Land Code 1956.


Kuala Lumpur

Source: The Star

How To Do Prepayment of AIA Housing Loan

I hava a housing loan with AIA which carries 4.99% fixed interest rate. At current OPR of 1.75%, this interest rate is quite high.

So to reduce the interest, I decided to do extra payment or prepayment to my housing loan.

I contacted AIA and they shared me the method using Maybank2u. I think  it will be similar with other internet banking.

Maybank2u Payee Method

  1. After login to Maybank2u, select Pay.
  2. Add as favorite. Select AIA Bhd as Payee. Put your policy number without letter M.
  3. Request TAC after add as favorite, you can pay any amount you want. There is no minimum amount.
aia prepayment - m2u select pay
aia prepayment – m2u select pay
aia prepayment add new favorite AIA Bhd
aia prepayment add new favorite AIA Bhd
aia prepayment - policy number without M
aia prepayment – policy number without M

AIA Mortgage Contact Details

Telephone: 03 2056 3359 / 03 2056 3374
Document from AIA regarding prepayment

Selenium Webdriver How To Increase Time Out for Page Load, Script Load or Element Locator

I couldn’t find at Stackoverflow on how to increase the timeout and the Selenium API not that easy to find on how to use it.

For Selenium WebDriver using NodeJS below is how to increase its time outs. The number is in milliseconds.

 let driver = await new Builder().forBrowser('chrome')
                .setChromeOptions(new chrome.Options().headless())
                .setFirefoxOptions(new firefox.Options().headless())

 driver.manage().setTimeouts({implicit: 120000, script: 120000, pageLoad:120000});

From Selenium Documentation

The following timeouts are supported (all timeouts are specified in milliseconds):

  • implicit specifies the maximum amount of time to wait for an element locator to succeed when locating elements on the page. Defaults to 0 milliseconds.
  • pageLoad specifies the maximum amount of time to wait for a page to finishing loading. Defaults to 300000 milliseconds.
  • script specifies the maximum amount of time to wait for an evaluated script to run. If set to null, the script timeout will be indefinite. Defaults to 30000 milliseconds.


Selenium User Agent vs Normal Browser User Agent

I noticed lots of websites now implement anti robot from website scraping. Most of them using technology where it uses browser users agent as part to detect whether it is a robot or human.

I use Selenium Webdriver to scrap few websites. When I browse the website, it shows the content but if using Selenium it shows empty content.

You can test the fingerprintjs here to check whether it detects human or robot.

If using Selenium for Chrome and Firefox , fingerprintjs will detect it as robots. However if using Selenium Safari, it detects Selenium as human.

fingerprint detect selenium for safari as human
fingerprint detect selenium for safari as human

Safari when launch by default is in incognito mode so maybe harder for detect it.

Below are comparison between Selenium for Chrome, Firefox and Safari browsers user agent.


Yellow colored rows means there are differences between Selenium and normal browsers user agent.

Chrome Browser

NoChrome - Normal Browser User AgentChrome - Selenium User Agent
1Host: localhostHost: localhost
2Connection: keep-aliveConnection: keep-alive
3Cache-Control: max-age=0
4Upgrade-Insecure-Requests: 1Upgrade-Insecure-Requests: 1
5User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36
6Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
7Sec-Fetch-Site: noneSec-Fetch-Site: none
8Sec-Fetch-Mode: navigateSec-Fetch-Mode: navigate
9Sec-Fetch-User: ?1Sec-Fetch-User: ?1
10Sec-Fetch-Dest: documentSec-Fetch-Dest: document
11Accept-Encoding: gzip, deflate, brAccept-Encoding: gzip, deflate, br
12Accept-Language: en-US,en;q=0.9,id;q=0.8,ms;q=0.7,fr;q=0.6Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
13Cookie: chat_uuid=1458159213.1598025760; gr_session=17411c1fd31-2125f7fe5bbd95cd; gr_reco=17411c1fd70-baa36285123101b1; utag_main=v_id:017411c1fb650017fec4094270bb03079001a07100942$_sn:4$_ss:1$_st:1598096705870$_pn:1%3Bexp-session$ses_id:1598094905870%3Bexp-session

Firefox Browser

NoFirefox - Normal Browser User AgentFirefox - Selenium User Agent
1Host: localhostHost: localhost
2User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:79.0) Gecko/20100101 Firefox/79.0User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:79.0) Gecko/20100101 Firefox/79.0
3Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
4Accept-Language: en-US,en;q=0.5Accept-Language: en-US,en;q=0.5
5Accept-Encoding: gzip, deflateAccept-Encoding: gzip, deflate
6Connection: keep-aliveConnection: keep-alive
7Cookie: _ga=GA1.1.1739912853.1548032065; gr_reco=1688e9dab95-b5d644815084ad40; utag_main=v_id:01688e9dad18001ff21f0bc7b4a800052009100f0093c$_sn:7$_ss:1$_st:1594889778490$_pn:1%3Bexp-session$ses_id:1594887978490%3Bexp-session; uuid=092deff09bc14cec8f32915260380536; cto_lwid=3ff13ed0-ccf0-46a0-b3d7-8a2e1cadcb3f; cto_idcpy=752176f4-9133-4eb6-a23d-8aacb880eaee; __gads=ID=258eba7044613b5a-22a30c3f84c20074:T=1594886702:S=ALNI_MYCzBeDMjB7doBDh_F5BZztWvpLvw; chat_uuid=407415995.1568209940; cto_bundle=aJ5M6V9JZCUyRjlLVVRRMG5ucUg0RUMlMkJtYk53UXpDJTJGY0Z3b09EU1RTZHpyY0xER1o0ektySUZZdU9iQ3d5UWJsOXFqUFZ4UDlZaGF4WmR4eThta2Q2S2o1NTVFd2Ruc1lBcVNJVW1IQ1ZlN1hYWTZ1VGpCZXJIZjRnRnhnZ0lEc3VuTkg3dCUyQmtTc0ZkajQ2WnJ6JTJGR0w5T3ElMkJEa1NlbjNCZlZzc2k0eVJYVU5oOEtPTjAlM0Q; _ga_SDQJRXDGN4=GS1.1.1596669834.9.0.1596669837.0; __atuvc=0%7C28%2C1%7C29%2C0%7C30%2C0%7C31%2C1%7C32; _fbp=fb.0.1586054074356.121762323; mudahHash=ec9f3f6655e4ccc0814a616dd3ee38f75d7ce494; cto_bidid=wxF3T19jb2hMYzJ1V0dITEZHRjRxMURWMWZrSTNmaDIlMkZ3RzBxTllBczB0amZMMWFOTDg2JTJGdU8xMTQzWDNzMm9TRzh0cmJHUEZFRTR0aUJWWDZQbHA1ZFhUd042cDMlMkIxdkdpOEt6S3ZqWlZ6YUNySSUzRA; _gcl_au=1.1.919768330.1594886698; gr_session=17356a7b66b-a9389a87a3e2a370
8Upgrade-Insecure-Requests: 1 Upgrade-Insecure-Requests: 1

Safari Browser

NoSafari - Normal Browser User AgentSafari - Selenium User Agent
1Host: localhost Host: localhost
2Upgrade-Insecure-Requests: 1 Upgrade-Insecure-Requests: 1
3Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
4User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15
5Accept-Language: en-us Accept-Language: en-us
6Accept-Encoding: gzip, deflate Accept-Encoding: gzip, deflate
7Connection: keep-alive Connection: keep-alive


Most number of differences found in Chrome and followed by Firefox. Safari doesn’t show difference between Selenium and normal browser user agent.

Does it means, it is much easier to trick anti robot using Safari?