Невозможно разрешить моему сценарию заполнять результат с помощью запросов на публикацию - PullRequest
2 голосов
/ 29 марта 2020

Я создал скрипт, использующий python в сочетании с селеном для анализа id, vikey и cbhtmlfragid, предназначенных для использования в качестве полезной нагрузки при использовании в запросах HTTP после публикации. Поскольку мне было трудно обрабатывать запросы id, vikey и cbhtmlfragid, я решил захватить их с помощью селена, чтобы можно было использовать их при отправке запросов.

Я пытаюсь чтобы заполнить результат, используя a в поле ввода рядом с Entity Name Or Identifier. Я мог бы заметить, что результат заполняется через почтовые запросы, которые я пытаюсь достичь программным путем.

ссылка на сайт

Чтобы заполнить В результате необходимо последовательно выполнить шаги в этом изображении , что в конечном итоге приводит к этому изображению

, с которым я пытался:

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()

Когда я выполняю приведенный выше скрипт, я могу обнаружить, что там нет результата. Итак, я полагаю, что я где-то ошибся.

Как я могу позволить своему сценарию заполнять результат с помощью запросов на публикацию?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Ну, запрос POST требует нескольких parameters с веб-сайта. Итак, вот план.

  1. Мы сделаем GET запрос на target URL и соберем все наши необходимые POST данные.
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

затем мы проверим / проверим, как structure запроса POST применяется в запросе POST, который требует от вас track POST parameters и как они действуют позади.

  • nodeWxxx-Advanced, где xxx - автоматически генерируемые 3 цифры.
  • _CBHTMLFRAGNODEID_, что key также содержит автоматически сгенерированный value.
  • _CBHTMLFRAGID_, который содержит unix timestamp, автоматически сгенерированный для проверки запроса post.
  • _CBNODE_ - это mechanism key, который автоматически генерируется впервые но затем он укореняется с 4 точками вверх. и затем стал static
  • _VIKEY_ содержит value, который также представлен в источнике HTML.

  • _CBNAME_ содержит 3 другой values, который buttonPush, selectPage и pageSizeChange, и нам не нужно использовать первое значение. поэтому мы будем работать на 2 и 3. мне не нужно объяснять вам, что эти значения делают, поскольку имя уже имеет значение.

  • _CBVALUE_ действует как двойная клавиша face, которая содержит digit значение, которое может действовать как pagination, если оно вызывается с selectPage, и оно может действовать как size items на страницу, если оно вызывается с pageSizeChange. где 4 означает 200 элементов на странице, что является максимумом.

Вы могли бы найти это complicated, если вы проанализировали HTML и нашли несколько значений Wxxx, где xxx - это 3 цифры, но я удалось проанализировать саму структуру HOST.

Теперь мы подготовили наши POST данные. но обратите внимание, что наш запрос GET получил перенаправление на следующий URL.
https://www.businessregistration.moc.gov.kh/cambodia-master/viewInstance/view.html?id=

Где id - это автоматически сгенерированный token, где host идентифицирует ваш запрос как действительный или нет.

Теперь, прежде чем сделать запрос POST, нам нужно изменить parameter, который обрабатывает operation просмотра данных. В нашем случае нам нужно изменить view на update следующим образом
https://www.businessregistration.moc.gov.kh/cambodia-master/viewInstance/update.html?id

Теперь мы готовы вызвать target, но сначала мы сделаем POST запрос на изменение items на page на 200 элементов. как я описал выше.

Теперь после нашего предыдущего POST мы сделаем al oop из POSTS для перебора страниц с нашим form data.

текущий result из website равен 1,421, что означает (элемент * 200, умноженный на 8, даст нам 1600), но последняя страница включает только 21 элементов вот почему 1421

Ниже приведен окончательный код:

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)

Пожалуйста, также прекратите удалять question после получения ответа, как вы всегда это делаете на ваши предыдущие сообщения, где вы обычно удаляете сообщение после получения ответа.

Пример вывода:

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)
1 голос
/ 07 апреля 2020

Я не уверен, почему вы хотите имитировать метод POST, когда вы можете легко автоматизировать его с помощью селена. Поскольку вы уже используете селен, вы можете автоматизировать его, не беспокоясь о сложностях подготовки необработанных запросов и передачи параметров.

С селеном довольно просто автоматизировать весь поток. Если только

  1. Вы хотите, наконец, использовать python запросов, чтобы сократить время, затрачиваемое на загрузку браузера.
  2. Вы ожидаете частых изменений на сайте HTML (хотя и меняются может также произойти с запросом POST, небольшое изменение параметра может нарушить запрос POST)

Если у вас есть две причины выше или третья, пожалуйста, не принимайте это как ответ, обновите вопрос и Я уберу это как ответ.

Ниже код может автоматизировать поток для вас, который я сгенерировал с помощью Selenium IDE . Сделаны некоторые модификации для использования меток вместо других жестко закодированных комбинаций xpath, добавлена ​​ проверка видимости и активируемая щелчком проверка .

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()  

Конечно, это не покрывает часть для извлечения данных из сетка после поиска. Протестировано с хромедрайвером 80.0 в Ubuntu.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...