1

I've created a script using python in combination with selenium to parse the id,vikey and cbhtmlfragid meant to be used as payload while being used within a post http requests. As I found it difficult to scrape id,vikey and cbhtmlfragid using requests, I thought to grab them using selenium so that I can use them while making a post requests.

I'm trying to populate result using a in the inputbox right next to Entity Name Or Identifier. I could notice that the result are populated through a post requests which I'm trying to achieve programmatically.

website link

To populate the result it is necessary to follow the steps sequentially in this image which ultimately leads to this image

I've tried with:

import re
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

link = 'https://www.businessregistration.moc.gov.kh/'
post_url = 'https://www.businessregistration.moc.gov.kh/cambodia-master/viewInstance/update.html?id={}'

payload = {
    'QueryString': 'a',
    'SourceAppCode': 'cambodia-br-soleproprietorships',
    'OriginalVersionIdentifier': '',
    'nodeW772-Advanced': 'N',
    '_CBASYNCUPDATE_': 'true',
    '_CBHTMLFRAGNODEID_': 'W762',
    '_CBHTMLFRAGID_': '',
    '_CBHTMLFRAG_': 'true',
    '_CBNODE_': 'W778',
    '_VIKEY_': '',
    '_CBNAME_': 'buttonPush'
}

def get_content(wait,link):
    driver.get(link)
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"a[data-rel='#appMainNavigation']"))).click()
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"a[class$='menu-soleproprietorships']"))).click()
    elem = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"a[class$='menu-brSoleProprietorSearch']")))
    driver.execute_script("arguments[0].click();",elem)

    item_id = driver.current_url.split("id=")[1].split("&_timestamp")[0]
    x_catalyst = re.findall(r"sessionId:'(.*?)',", str(driver.page_source), flags=re.DOTALL)[0]
    item = re.findall(r"viewInstanceKey:'(.*?)',", str(driver.page_source), flags=re.DOTALL)[0]
    elem = re.findall(r"guid:(.*?),", str(driver.page_source), flags=re.DOTALL)[0]
    return item_id,x_catalyst,item,elem

def make_post_requests(item_id,x_catalyst,item,elem):
    payload['_VIKEY_'] = item
    payload['_CBHTMLFRAGID_'] = elem

    res = requests.post(post_url.format(item_id),data=payload,headers={
        'user-agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',
        'x-requested-with':'XMLHttpRequest',
        'x-catalyst-session-global':x_catalyst
    })
    soup = BeautifulSoup(res.text,"lxml")
    result_count = soup.select_one("[class='appPagerBanner']")
    print(result_count)

if __name__ == '__main__':
    driver = webdriver.Chrome()
    wait = WebDriverWait(driver,10)
    item_id,x_catalyst,item,elem = get_content(wait,link)

    make_post_requests(item_id,x_catalyst,item,elem)
    driver.quit()

When I execute the above script, I could find out that there is no result in there. So, I suppose I went somewhere wrong.

How can I let my script populate result using post requests?

asmitu
  • 175
  • 11

2 Answers2

4

Well, The POST request needing multiple parameters from the website. So here's the plan.

  1. We will make GET request to the target url and collect all our required POST data.
https://www.businessregistration.moc.gov.kh/cambodia-master/relay.html?url=https%3A%2F%2Fwww.businessregistration.moc.gov.kh%2Fcambodia-master%2Fservice%2Fcreate.html%3FtargetAppCode%3Dcambodia-master%26targetRegisterAppCode%3Dcambodia-br-soleproprietorships%26service%3DregisterItemSearch&target=cambodia-master
  1. we will then check/verify how the structure of the POST request is applied within the POST request which is requiring you to track the POST parameters and how they acting behind.

    • nodeWxxx-Advanced where xxx is 3 digits auto generated.
    • _CBHTMLFRAGNODEID_ that key is also holding an auto generated value.
    • _CBHTMLFRAGID_ that's holding a unix timestamp auto generated to validate the post request.
    • _CBNODE_ is a mechanism key which is auto generated for the first time but it's then rooted with 4 points up. and then became static
    • _VIKEY_ is holding a value which presented within the HTML source as well.

    • _CBNAME_ is holding 3 different values which is buttonPush, selectPage and pageSizeChange and we don't need to use the first value. so we will work on 2nd and 3rd. i don't need to explain you what those values do as the name already present the meaning.

    • _CBVALUE_ is acting as double face key, which hold a digit value which can act as the pagination if it's called with selectPage, And it can act as the size of the items per page if it's called with pageSizeChange. where 4 is meaning 200 items per page which is the maximum.

You might found this complicated if you parsed the HTML and found multiple values of Wxxx where xxx is 3 digits, but I've been able to analyze the HOST structure itself.

  1. Now we've prepared our POST data. but here's a note that our GET request got redirection to the following url.
https://www.businessregistration.moc.gov.kh/cambodia-master/viewInstance/view.html?id=

Where id is actually the an automatically generated token where the host identify your request as a valid one or not.

  1. Now before made the POST request, we need to change the parameter which is handling the operation of viewing the data. In our case we will need to change view to update to be as the following
https://www.businessregistration.moc.gov.kh/cambodia-master/viewInstance/update.html?id
  1. Now we are ready to call the target but firstly we will make POST request to change the items per page to be 200 items. as i described above.

  2. Now after our previous POST, we will make a loop of POSTS to iterate over pages with our form data.

the current result of the website is 1,421 which means (200 item multiplied by 8 will give us 1600) but the last page is included only 21 items so that's why 1421

Below is the final code:

import requests
from bs4 import BeautifulSoup
import re

one = "https://www.businessregistration.moc.gov.kh/cambodia-master/relay.html?url=https%3A%2F%2Fwww.businessregistration.moc.gov.kh%2Fcambodia-master%2Fservice%2Fcreate.html%3FtargetAppCode%3Dcambodia-master%26targetRegisterAppCode%3Dcambodia-br-soleproprietorships%26service%3DregisterItemSearch&target=cambodia-master"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0"
}


def main(url):
    with requests.session() as req:
        r = req.get(url, headers=headers, allow_redirects=True)
        node = re.search(r"nodeW\d{3}-Advanced", r.text).group()
        nodeid = re.search(r"AsyncWrapperW\d{3}", r.text).group()
        agid = re.search(r"guid:(\d+)", r.text).group(1)
        cbnode = re.findall(r"Callback\('([^']*)'", r.text)[5]
        vikey = re.search(r"viewInstanceKey:'([^']*)'", r.text).group(1)

        data = {
            'QueryString': 'a',
            'SourceAppCode': 'cambodia-br-soleproprietorships',
            'OriginalVersionIdentifier': '',
            f"{node}": 'N',
            '_CBASYNCUPDATE_': 'true',
            '_CBHTMLFRAGNODEID_': nodeid[-4:],
            '_CBHTMLFRAGID_': agid,
            '_CBHTMLFRAG_': 'true',
            '_CBNODE_': f"W{int(cbnode[1:])+4}",
            '_VIKEY_': vikey,
            '_CBNAME_': 'selectPage'
        }

        target = r.url.split("&")[0].replace("view.", "update.")

        change = data.copy()
        change['_CBNAME_'] = "pageSizeChange"
        change['_CBVALUE_'] = "4"

        r = req.post(target, headers=headers, data=change)

        for num in range(1, 9):
            print(f"Extracting Page# {num}\n {'*' * 40}")
            data['_CBVALUE_'] = num
            r = req.post(target, headers=headers, data=data)
            soup = BeautifulSoup(r.content, 'html.parser')

            for item in soup.findAll("span", class_="appReceiveFocus")[3:]:
                print(item.text)


main(one)

Please also stop to delete your question after you receive the answer, as you always do on your previous posts where you usually delete the post after receiving the answer.

Sample of output:

Extracting Page# 1
 ****************************************
អេមី ជេមស៍ / AMY GEMS (50009790)
អាហារដ្ឋាន លីន លៀនជីន ហ៊្វូដ ហ្វ្លេវើ / AHARATHAN LIN LIANJIN FOOD FLAVOR (50009800)
អាមេទីស ដាយមិន ខេធីវី / AMETHYST DIAMOND KTV (50009801)
អេស៊ា ដាយអឹម៉ិន ស៊ីធី អេនធើប្រាយ / ASIA DIAMOND CITY ENTERPRISE (50009845)
អរុណ យ៉ាណា / ARUN YANA (50009848)
អេ ដឺ ស៊ាវ ជី ឌាន / A DE XIAO CHI DIAN (50009856)
អង្គរ ផែល ប៊ូទិក / ANGKOR PAL BOUTIQUE (50009862)
អូហ្ក្រេ ឌុយ សូឡី / AUGRE DU SOLEIL (50001007)
អង្គរធំ មន្ទីរពហុព្យាបាល និង សម្ភព / ANGKOR THOM MONTY PEAHUK PYEABAL & SAMPHUB (50009905)
អាមីកា ត្រាវែល (កាំបូដ្យ) / AMICA TRAVEL (CAMBODGE) (50009916)
អង្គរ ជិនសារ​ ហ៊្វូដ / ANGKOR JINSHA FOOD (50009973)
អចលនទ្រព្យ វ៉ាន់សៀង / ACHALNAK TROP VEAN SIENG (50009986)
អាឡាដាំង សឹបផ្លាយអឺរ / ALADANG SUPPLIER (50010017)
អាន ស៊ី មីន ណាន ស៊ាវ ឈី / AN XI MIN NAN XIAO CHI (50010068)
អង្គរ មែនហ្គោ ទ្រី រីហ្សត / ANGKOR MANGO TREE RESORT (50010072)
អាហារដ្ឋាន ជៀ មីង យៀក កាយ / AHARATHAN JIA MING YUE CAI (50010073)
អូប៊ែ អេលេហ្វិន ប្លង្គ / AUBERGE ELEPHANT BLANC (50001029)
អានីស ស្តារ អ៊ិនវ៉ាយរ៉ិនម៉ិនថល ខូតធីង / ANISE STAR ENVIRONMENTAL COATINGS (50010091)
អរសាំ ហៅស៍ វីឡា / AWESOME HOUSE VILLA (50010131)
អាន វេងស្រ៊ុន ត្បូងឃ្មុំ / AN VENGSRUN TBONG KHMUM (50010150)
ភោជនីយដ្ឋាន អា យុង តា ផាយ តាំង / AH YONG TA PAI TANG RESTAURANT (50010177)
អា ឆ័ន ចុង ឆាង ធីង / A CHUAN ZHONG CHAN TING (50010232)
អាតឡូវ ខនសាល់ធីង / ARTLOW CONSULTING (50010235)
សណ្ឋាគារ អង្គរ យ៉ាយ័ន / ANGKOR YAYUAN HOTEL (50010236)
អេ.អេម ហាងបញ្ចាំ / A.M HANG BANH CHAM (50010326)
អង់ទ្រីក្ស៍ ត្រេឌើរ / ANTRIKSH TRADERS (50010335)
អង្គរ សុខសាន្តត្រាណ / ANGKOR SOKSAN TRAN (50001055)
អង្គរ ស៊ែរ ធួរ / ANGKOR SHARE TOURS (50010341)
អង្គរ សិលា ពេជ្រ / ANGKOR SEILA PICH (50001056)
អ័ង ចូង អ័ង / ANG CHOUNG ANG (50010382)
អៅ មិន ជិន ឡុង 18 / AO MEN JIN LONG 18 (50010387)
អង្គរ ភើល / ANGKOR PEARL (50001067)
ភោជនីយដ្ឋាន អូ ម៉ាស្សេ / AU MARCHE RESTAURANT (50010465)
ភោជនីយដ្ឋាន អេ អាយ / A I RESTAURANT (50010472)
អាន ស៊ី មីង ស៊័ន ជឹន ស័រ / AN XI MING XUAN ZHEN SUO (50010513)
អាម៉ាណូ ឃែរ វ៉ធើរ / AMANO CARE WATER (50010521)
អាសស្តា វ៉ធើរ / ASSDA WATER (50010555)
អង្គរ ឡូធើស អាត / ANGKOR LOTUS ART (50010576)
សណ្ឋាគារ អេផល 2 / APPLE 2 HOTEL (50010621)
អាហារដ្ឋាន ផ្ទះបាយខ្មែរ ភឿក / AHARATHAN PHTEAH BAI KHMER PERK (50001084)
អង្គរ ស៊ីវុត្ថា ហូថេល / ANGKOR SIVUTHA HOTEL (50010625)
អាទីហ្វិក ឃីតឈិនវែរ អិកសុីប៊ីសិន សេនធ័រ / ARTIFEX KITCHENWARE EXHIBITION CENTER (50010654)
សណ្ឋាគារ អង្គរ យៀ ធីម / ANGKOR YEAR THEME HOTEL (50010659)
អេប៊ីឡូស៍ ឌីជីធលអេដជ៍ / ABILOS DIGITALEDGE (50010666)
សណ្ឋាគារ អេភី 7 ដេ / AP 7 DAY HOTEL (50010700)
អង្គរ អឹមេហ្ស៊ីង ហូលីដេ & ធួរ / ANGKOR AMAZING HOLIDAY & TOURS (50001092)
អេអេហ្វអេសស៊ី ព្រីមៀម ស្ទ័រ / AFSC PREMIUM STORE (50010703)
ភោជនីយដ្ឋាន អូ រ៉ង់ដេ-វូ / AU RENDEZ-VOUS RESTAURANT (50010720)
អន្តរជាតិលេខ១ វី យា ណា / ANYARAKCHEAT LEK 1 VY YA NA (50010733)
អៅ ម៉ាយ យ៉ា លី យី មេន ជ័ង / AO MAY YA LY YIE MAN CHUANG (50010740)
អេស្រ៊ី អ៊ិនធើណេសិនណល អ៊ិនវេសម៉ិន / ATHREE INTERNATIONAL INVESTMENT (50010764)
អង្គរ សាន់ អែន គុយ គីមយ៉ា ហៅស៍ / ANGKOR SUN AND KUY KIM YA HOUSE (50010801)
អាតឡូវ ខនសាល់ធីង I / ARTLOW CONSULTING I (50010809)
អា ហ្វុង ស៊ុបភើម៉ាឃីត / AR FONG SUPERMARKET (50010826)
អាម៉ាហ្សូន អេឡិចទ្រីក សប / AMAZON ELECTRIC SHOP (50010830)
អេស៊ីអិល ប៊ី ផនសប / ACL B PAWNSHOP (50010857)
អេពិក អ៊េចឌី អេទ្បីវាទ័រ / APEX HD ELEVATOR (50010891)
អេ & អ៊ីវ៉ា ហ្វេសិន / A & EVA FASHION (50010895)
អេននី វីល ម៉ាត / ANNIE WILL MART (50010912)
ភោជនីយដ្ឋាន អានហួយ ហ័យណាន / AN HUI HUAI NAN RESTAURANT (50010941)
អេនថូនី អឹផាតម៉ិន / ANTHONY APARTMENT (50010982)
អាណែត ប៊ីយូធី បាយ តូណូ ប្រ៊េន / AH NETH BEAUTY BY TONO BRAND (50011007)
ភោជនីយដ្ឋាន អេរេប៉ាស៍ ខារ៉ាខាស៍ / AREPAS CARACAS RESTAURANT (50011033)
អង្គរ ប៊ែដមីនថុន ក្លឹប សៀមរាប / ANGKOR BADMINTON CLUB SIEMREAP (50011075)
ភោជនីយដ្ឋាន អា វ៉ាង ជឺ ប៉ាវ អ៊ី / A WANG CHEU BAO YI RESTAURANT (50011102)
ភោជនីយដ្ឋាន អាយ សាង សួយ ជូរ / AI SHANG SHUI ZHOU RESTAURANT (50011103)
អេ ធី អ៊ីនជិននារីង វើកសប / A T ENGINEERING WORKSHOP (50011140)
អចលនទ្រព្យ ទឹកមាស ធីអិម / AKCHALNAKTROP TEUK MEAS TM (50011184)
អារុណរះ រ៉ូមែន / ARUNRASS ROMAIN (50011207)
អាអយ ហូសថេល / AOI HOSTEL (50011221)
អំពូលភ្លើង ពន្លឺពត៌មាន / AMPUOULPHLEUNG PONLEU POR MEAN (50011335)
អន្លង់ធំ វ៉ធើរ / ANLONGTHOUM WATER (50011341)
អង្គរ សរ សេរី រីហ្សត / ANGKOR SOR SEREI RESORT (50011347)
ផលិតកម្ម អាថាន់ ភាពយន្ត / ATHAN FILM PRODUCTION (50011350)
អេ អាយ ជី អូ កាហ្វេ / A I G O CAFE (50011416)
អាឡេវ៉ូ / ALEVU (50011433)
អាហារសមុទ្រចំហុយ ក្តាមមាស / AHAR SAMUTH CHOMHUY KDAMMEAS (50011470)
អសនៈ ប៊ូទិក វីឡា / ASANAK BOUTIQUE VILLA (50011487)
អាហារដ្ឋាន ផ្ទះបាយខ្មែរ ភឿក I / AHARATHAN PHTEAH BAI KHMER PERK I (50011504)
អចលនទ្រព្យ យាន ឈីងប៊ូ / ACHALNAKTRORP YAN QINGBU (50011521)
ភោជនីយដ្ឋាន អា ឡាំង សាវ ខាវ / AH LAING SHAO KHAO (50011555)
អារ៉ាយ៉ា អង្គរ រេសុីដេន I / ARAYA ANGKOR RESIDENCE I (50011563)
អាស៊ីង ភ្នាក់ងារទេសចរណ៏ / AH XING PNAKNGEATESACHOR (50011586)
សណ្ឋាគារ អង្គរ បូស្គី / ANGKOR BOSKY HOTEL (50011621)
ហាងនំប័ុង អូសសីុ ហ្គួមេ / AUSSIE GOURMET BAKERY (50001188)
សណ្ឋាគារ អង្គរ ហាវជាំង / ANGKOR HAOJIANG HOTEL (50011644)
អាប៉ូឡូ រៀល អុីស្ទេត / APOLLO REAL ESTATE (50011655)
ផ្ទះសំណាក់ អរុណរះ ហេងហេង / ARUNRAS HENG HENG GUESTHOUSE (50011717)
អូតូ ហាប់ (ខេមបូឌា) / AUTO HUB (CAMBODIA) (50011772)
ផ្សារទំនើប អាយ សាំង / AI SANG SUPERMARKET (50011790)
អាណាមេន ព្រីនធីង ហៅស៍ / ANAMAN PRINTING HOUSE (50011839)
អាតម៉ាលែន រីសត៍ / ATMALAND RESORT (50011842)
អាសុី ទ្រីលីហ្គល អុិនធើណេសិនណល ស្កូល (អេ.ធី.អាយ.អេស) / ASIA TRILINGUAL INTERNATIONAL SCHOOL (A.T.I.S) (50011
908)
អេ & ហ្សេត ម៉ាស្ទ័រ / A & Z MASTER (50011909)
អាយ យៀក ស៊ួយ ឡេវ ហ៊ួយ / AI YUE SHUI LIAO HUI (50011946)
អេស៊ា ម៉ាំងឃី ត្រាវែល (ខេមបូឌា) / ASIA MONKEY TRAVEL (CAMBODIA) (50011972)
អេលីស វីឡា / ALICE VILLA (50011993)
អង្គរ ប៊ែមប៊ូ ហ្វាយប៊ឺរ / ANGKOR BAMBOO FIBERS (50012035)
ភោជនីយដ្ឋាន អាដាហ្ស៊ី យេផេនីស / ADACHI JAPANESE RESTAURANT (50012044)
ភោជនីយដ្ឋាន អៃ សាង ជា ស៊ី / AI SHANG JIA SHI RESTAURANT (50012069)
អ៊ែតវេនឈ័រ សៀមរាប ​រេស៊ីដេន / ADVENTURE SIEMREAP RESIDENCE (50012135)
អាំង ប៊ីប៊ីឃ្យូ គ្រីល / ANG BBQ GRILL (50012143)
អចលនទ្រព្យ ចាសួន / AKCHALNAKTROP JASOUN (50012160)
អឹផាតម៉ិន 103 / APARTMENT 103 (50012161)
អេ.ឌី អាន ដុង អេនធើធេនមេន / A.D AN DONG ENTERTAINMENT (50012165)
អេស៊ា រីហ្វ្លេក ត្រាវែល អេន ធួរ / ASIA REFLECT TRAVEL AND TOUR (50012181)
អាណាខន់ដា តិចណូឡូជី / ANACONDA TECHNOLOGY (50012187)
អេឌីជេ គ្រីអេធីវ / ADJ CREATIVE (50012256)
អង្គរ ប៊ុន ធួរ / ANGKOR BUN TOUR (50012265)
អ៊ែមប៊ើ អង្គរ វីឡា ហូថេល អេន ស្ប៉ា / AMBER ANGKOR VILLA HOTEL AND SPA (50012311)
អៃ ឈីង ហាយ ប៊ូទីក ហូថេល / AI QING HAI BOUTIQUE HOTEL (50012317)
អនុស្សាវរីយ៍ល្អកោះរ៉ុង / ANUSAORY LAOR KOH RONG (50012340)
អង្គរ មែនហ្គោ ទ្រី រេស៊ីដេន ហូថេល / ANGKOR MANGO TREE RESIDENCE HOTEL (50012378)
សណ្ឋាគារ អេឡិចស៊ីស / ALEXIS HOTEL (50012418)
អចលនទ្រព្យ តាកទឺ / AKCHALNAK TROP TAK TEUR (50012422)
អាហារដ្ឋាន ហោ វ៉ាង សេង យ៉ាន / AHARATHAN HAO WANG SHENG YAN (50012429)
អាំង ថាណូ / AING TANO (50012439)
អាយសាង កុំព្យូទ័រ ណេត សប / AISANG COMPUTER NET SHOP (50012501)
អង្គរកាតាលីណា ប៊ូទីកវីឡា / ANGKOR CATALINA BOUTIQUE VILLA (50012509)
អេឌវ៉ាន់ឈ័រ ដូម រីសត / ADVENTURE DOME RESORT (50012521)
អេ.ភី.ធី.ធី ត្រាវែល & ធួរ / A.P.T.T TRAVEL & TOURS (50012528)
អឹផាតម៉ិន វីភី លី ហេង / APARTMENT VP LY HENG (50012540)
អាហារដ្ឋាន វីភី លី ហេង / AHARATHAN VP LY HENG (50012541)
អាដូរាស៍ ស្ប៉ា / ADORASS SPA (50012593)
ភោជនីយដ្ឋាន អាន់ណាពួរណា ឥណ្ឌាន / ANNAPURNA INDIAN RESTAURANT (50012620)
អវតាន ឆាតធើរ បាស / AVATAN CHARTER BUS (50012640)
អាយសាង កុំព្យូទ័រ ណេត សប សង្កាត់ 3 / AISANG COMPUTER NET SHOP SANGKAT 3 (50012660)
អាមីលីយ៉ា ប៊ីយូធី ខសមេធីក / AMILIYA BEAUTY COSMETICS (50012679)
អង្គរ ស្ក្រាប់ មរកត & ស្ប៉ា / ANGKOR SCRUB MOROKOT & SPA (50012680)
អេស៊ាន II ហាងបញ្ចាំ / ASIAN II HANG BANHCHAM (50012681)
អាហារដ្ឋាន ម្លប់សុបិន្ត / AHARATHAN MLOB SOBEN (50012682)
អា លីលី ប៊្រែន ប៊ីយូធី / AH LYLY BRAND BEAUTY (50012729)
អង្គរ ម៉ូនូមែន ហូថេល / ANGKOR MONUMENT HOTEL (50012733)
អេភីខេអ សៀមរាបអង្គរ ខនទ្រីសាយ / APKR SIEM REAP ANGKOR COUNTRY SIDE (50012752)
អង្គរ អុីន ហ្វ័រ ហូមស្តេ / ANGKOR UNE FOIS HOMESTAY (50000130)
អង្ករ ស្ថាបនិក / ANGKOR SATHABNEK (50001312)
អេ1 រីសាយខល / A1 RECYCLE (50012850)
អាដ័រ មី / ADORE ME (50012890)
អាវ គឹមហយ / AV KOEMHORY (50012896)
អឹផាតម៉ិន 19 / APARTMENT 19 (50012900)
អានខិន ខា រីភែ / ANKEN CAR REPAIR (50012909)
សណ្ឋាគារ អង្គរ សេនត្រល់ ផាក & ស្ប៉ា / ANGKOR CENTRAL PARK HOTEL & SPA (50012921)
អង្គរ ម៉ាវេលើស ត្រាវែល / ANGKOR MARVELLOUS TRAVEL (50012945)
អេនជូលី វីឡា / ANJULIE VILLA (50013023)
អាហារដ្ឋាន សំ សំអឿន ភូមិគៀនត្រជាក់ចិត្ត / AHARATHAN SAM SAM OEUN PHOM KEAN TRACHEAK CHET (50013043)
អេនី ផ្ទះ / ANNE PHTEASH (50013049)
អាបូរេស្ត ហូសថេល / ABOREST HOSTEL (50013073)
អេ.វី.អេស.អាយ.អេស.ប៊ី (ខេមបូឌា) / A.V.S.I.S.B (CAMBODIA) (50013098)
អា ហ៊ុយ ផាយ តាង / AR HUI PAI DANG (50013141)
អង្គរ ក្រូសង់ បេកឃើរី / ANGKOR CROISSANT BAKERY (50013147)
អាំង បានភាគ្យ / AING BANPHEAK (50001347)
អេនដ្រូ សម / ANDREW SAM (50013301)
ភោជនីយដ្ឋាន អារ៉ាប៊ីក សាវ៉ារម៉ា / ARABIC SHAWARMA RESTAURANT (50013339)
អាហារដ្ឋាន ថៅ យាន ទៅ ខៅ អ៊ី / AHARATHAN THAO YEAN TOUV KHAO YI (50013351)
អាហារដ្ឋាន យ៉ាន ជា ជឺ ប៉ៅ អ៊ី / AHARATHAN YAN CHEA CHEU PAO YI (50013352)
អាហារដ្ឋាន ចិន ឈីង អាយ ខៅ ប៉ា / AHARATHAN CHEN CHHING AI KHAO PA (50013353)
អាហារដ្ឋាន អ័រ អាយ អ័រ ជា ស៊ន់ ឆៃ អ៊ី / AHARATHAN OR AI OR CHEA SHUN CHHAI YI (50013354)
អាហារដ្ឋាន ចិន វួយ សា ស៊ាន សាវ ឈឺ / AHARATHAN CHEN WUY SHA SEAN SAV CHHER (50013355)
អាង-យី ប៊ីយូធី សប / ANG-YI BEAUTY SHOP (50013361)
ភោជនីយដ្ឋាន អាន់ណាពួរណា I ឥណ្ឌាន / ANNAPURNA I INDIAN RESTAURANT (50013381)
អឹឡាយអិន ត្រេនស្លេសិន រីសសស៍ / ALLIANCE TRANSLATION RESOURCE (50013407)
អង្គរ អ៉ិមប្រេស ឡេថិច / ANGKOR EMBRACE LATEX (50001377)
អេ.អ.វ៉ាយ ខសមេធីក / A.R.Y COSMETIC (50013492)
អេស៊ា ម៉ាឃីត ផាប់ស្ទ្រីត / ASIA MARKET PUB STREET (50001395)
អឹឈីវើ អិុនធើណេសិនណល ស្គូល / ACHIEVERS INTERNATIONAL SCHOOL (50001513)
អាតវ៉កស៍ ស្ទូឌីយោ (ខេមបូឌា) / ARTWORX STUDIOS (CAMBODIA) (50001559)
អេឃ្វើរៀស ហូថេល អេន អឺបេន រីហ្សត / AQUARIUS HOTEL AND URBAN RESORT (50001601)
អេមីធី អង្គរ សឺវីស / AMITY ANGKOR SERVICE (50001604)
អាទីឡា អង្គរ / ATTILA ANGKOR (50001613)
ផ្ទះសំណាក់ អង្គរ ភ្នំមាស / ANGKOR PHNOM MEAS GUESTHOUSE (50001646)
អង្គរ សេនលីន ត្រាវែល / ANGKOR SENLIN TRAVEL (50001659)
អាប៊ែនឌែន ឡៃ អុិនធើណេសិនណល​ ស្គូល / ABUNDANT LIFE INTERNATIONAL SCHOOL (50001664)
សណ្ឋាគារ អង្គរ ប៊ូធីក ត្រភីក / ANGKOR BOUTIQUE TROPIC HOTEL (50001668)
អង្គរ រង់ដេវូ វីឡា / ANGKOR RENDEZVOUS VILLA (50001703)
អង្គរ ហាត បឹងហ្គាឡូ / ANGKOR HEART BUNGALOW (50001751)
អេស៊ា អិចផ្លរើ ត្រាវែល / ASIA EXPLORER TRAVEL (50001758)
អាស្ត្រូ អេស៊ា ធួរ & ត្រាវែល សឺវីស / ASTRO ASIA TOUR & TRAVEL SERVICES (50001767)
អូន សុគន្ធា / AUN SOKUNTHEA (50001796)
អង្គរដេសធីណេសិនត្រាវែល / ANGKOR DESTINATION TRAVEL (50001799)
អង្គរ ធួរ បាស ត្រេនស្ព័តថេសិន / ANGKOR TOUR BUS TRANSPORTATION (50001809)
អង្គរ អ៉ិនធើ ហ្វីតណេស / ANGKOR INTER FITNESS (50001836)
អ៊ែតមឺស៊្វែរ រេសថឹរេន / ATMO SPHERE RESTAURANT (50001849)
អេស៊ា ជេមអាប់ ត្រាវែល / ASIA JAMUP TRAVEL (50001901)
អ៊ែបសឹលូត ធួរ & ត្រាវែល (ខេមបូឌា) / ABSOLUTE TOURS & TRAVEL (CAMBODIA) (50001903)
អង្គរ អេ ណាទួរ វ៉ូយ៉ាហ្ស៍ / ANGKOR ET NATURE VOYAGE (50001942)
អង្គរ ម៉ាល់ធីម៉ីឌៀ / ANGKOR MULTIMEDIA (50001949)
អេ.អេស.អេច ត្រាវែល I / A.S.H TRAVEL I (50001955)
អេអេ ប្រាយវេត ជើនី អេន វីឡា / AA PRIVATE JOURNEYS AND VILLAS (50001966)
អង្គរ ថោន ថ្មី / ANGKOR TOWN THMEY (50001990)
អឹឃូស្ទីក អេនធើធេនមិុន / ACOUSTIC ENTERTAINMENT (50002025)
អង្គរ បុរីប្រិមប្រិយ៍ ម៉ាស្សា ខ្មែរ បុរាណ / ANGKOR BOREIBREMBREI MASSAGE KHMER BORAN (50000204)
អប្សរា ស៊ីល សេនធ័រ / APSARA SILK CENTER (50002122)
អ៊ែតវេនឈ័រ អេស៊ា ត្រាវែល & ធួរ / ADVENTURE ASIA TRAVEL & TOURS (50002161)
អង្គរ ហ្វីលីង ប៊ូទីក / ANGKOR FEELING BOUTIQUE (50002206)
សណ្ឋាគារ អេ-វើខេសិន ប៊ូធីក / A-VACATION BOUTIQUE HOTEL (50002210)
អង្គរ ដឹ ថេន ប៊ែលស៍ / ANGKOR THE TEN BELLS (50002218)
អេមប្រាយ ថេលើរ / AMPRISE TAILOR (50002223)
អេស៊ា​ ហេបភី​ វីឡា / ASIA HAPPY VILLA (50002232)
អេ សិដ្ឋ អូតូ / A SETH AUTO (50002321)
អង្គរទិព្វ លីគង កាត់ដេរ / ANGKOR TIP LYKORNG KATDE (50002374)
  • I delete questions sometimes only when they are forcibly closed or marked as duplicate. However, this answer is way beyond what I expected. Let's wait while the bounty is on so that other can see how elegantly you made it possible. Thanks. – asmitu Apr 07 '20 at 10:27
  • @asmitu the answer were ready since the first `10` minute you've asked your question but i were waiting for you confirm the point which i asked about it. – αԋɱҽԃ αмєяιcαη Apr 07 '20 at 10:28
  • This url `https://www.businessregistration.moc.gov.kh/cambodia-master/service/create.html?targetAppCode=cambodia-master&targetRegisterAppCode=cambodia-br-soleproprietorships&service=registerItemSearch` could also be used as a starting url to collect the fields necessary to send a post requests, right? – asmitu Apr 07 '20 at 12:15
  • @asmitu This is the start `url` yes, as you can see within the code. – αԋɱҽԃ αмєяιcαη Apr 07 '20 at 12:17
1

I am not sure why you want to mimick the POST method when you can automate it easily with selenium. As you are already using selenium you can automate without being bothered about underlying complexities of preparing raw requests and parameter passing.

With selenium its quite easy to automate the whole flow. Unless,

  1. You want to use python requests finally to reduce the time taken by browser load time.
  2. You are expecting changes in the site HTML frequently (though change can also happen to the POST request, small parameter change can break the POST request)

If you have above two reason or a third one please don't accept this as an answer, update the question and I will remove this as an answer.

Below code can automate the flow for you, which I have generated with the help of Selenium IDE. Done some modifications to use labels instead of other hardcoded xpath combinations, added visibility check and clickable check to it.

import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import ElementNotVisibleException
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Chrome()
driver.get("https://www.businessregistration.moc.gov.kh/")
driver.maximize_window()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(text(),\'Online Services\')]"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Sole Proprietorships']"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='appSubMenuLink menu-brSoleProprietorSearch']/span[text()='Search Entity']"))).click()
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.ID, "QueryString")))
driver.find_element(By.ID, "QueryString").send_keys("a")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class=\'appReceiveFocus\' and text()=\'Search\']"))).click()
time.sleep(10)
driver.quit()  

Of course it doesn't cover the part to extract data from the grid after search. Tested with chromedriver 80.0 in Ubuntu.

Sariq Shaikh
  • 940
  • 8
  • 29