Sebenarnya Anda perlu memasukkan parameter Payload
postingan lengkap.
Kita harus melakukannya dalam Session
yang sama menggunakan requests.Session()
karena penomoran halaman situs web menggunakan rotasi function
berdasarkan __dnnVariable
yang mana server menerimanya berdasarkan permintaan JS
yang diterjemahkan ke Loop.
Dimana sebenarnya arti Next
Jadi, saya telah membuat permintaan GET
terlebih dahulu dan mengambil params
yang diperlukan (beberapa di antaranya dinamis dan lainnya statis)
Kemudian, saya membuat permintaan posting di bawah session
yang sama
import requests
import re
from bs4 import BeautifulSoup
from urllib.parse import unquote
data = {
'__EVENTTARGET': "dnn$ctr410$MemberSearch$btnSearch",
'__EVENTARGUMENT': '',
'__VIEWSTATEENCRYPTED': '',
'dnn$ctlHeader$dnnSearch$Search': 'SiteRadioButton',
'dnn$ctlHeader$dnnSearch$txtSearch': '',
'dnn$ctr410$MemberSearch$txtFirstName': '',
'dnn$ctr410$MemberSearch$txtLastName': '',
'dnn$ctr410$MemberSearch$ddlMemberType': 0,
'dnn$ctr410$MemberSearch$txtMembershipNumber': '',
'dnn$ctr410$MemberSearch$txtCpNumber': '',
'dnn$ctr410$MemberSearch$txtCity': '',
'dnn$ctr410$MemberSearch$txtOrganisation': '',
'dnn$ctr410$MemberSearch$txtAddress2': '',
'dnn$ctr410$MemberSearch$txtAddress3': '',
'dnn$ctr410$MemberSearch$txtEmail': '',
'dnn_ctr410_MemberSearch_grdMembers_ClientState': '',
'ScrollTop': 432,
'__dnnVariable': '{"__scdoff":"1","__dnn_pageload":"__dnn_setScrollTop();"}'
}
def main(url):
with requests.Session() as req:
r = req.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
data['StylesheetManager_TSSM'] = re.search(
r"hf.value \+= '(.*?)\'", r.text).group(1)
data['ScriptManager_TSM'] = unquote(soup.findAll('script', src=True)
[2]['src']).split("=", 3)[-1]
data['__VIEWSTATE'] = soup.find("input", id="__VIEWSTATE").get("value")
data['__VIEWSTATEGENERATOR'] = soup.find(
"input", id="__VIEWSTATEGENERATOR").get("value")
data['__EVENTVALIDATION'] = soup.find(
"input", id="__EVENTVALIDATION").get("value")
for _ in range(10):
r = req.post(url, data=data)
soup = BeautifulSoup(r.content, 'html.parser')
names = [name.text for name in soup.select("div.name_head")]
page = soup.select_one(
"a.rgCurrentPage").next_sibling['href'].split("'")[1]
data['__EVENTTARGET'] = page
data['__EVENTVALIDATION'] = soup.find(
"input", id="__EVENTVALIDATION").get("value")
data['__VIEWSTATE'] = soup.find(
"input", id="__VIEWSTATE").get("value")
print(names)
main("https://www.icsi.in/student/Members/MemberSearch.aspx")
Catatan: pada setiap permintaan Anda akan mendapatkan data yang tidak berurutan karena fungsi search
menggunakan random
di server back-end.
Keluaran:
['SH. DILIP RAGHUNATH KOTWAL', 'SH. ARUNODAY ROY MUKHERJEE', 'SH. J SUBRAMANI', 'SH. R KRISHNAMANI', 'SH. R NARAYANASWAMI', 'SH. M V GOPALAKRISHNAN', 'SH. RAJAM KRISHNAMURTHY', 'SH. V SIVASUBRAMANIAN', 'SH. V RAGHAVENDRAN', 'SH. G V AIMAN']
['SH. K J MATHEW', 'SH. K K GHOSH', 'SH. SUBHASH CHANDER DHAWAN', 'SH. BABU RAM MAHESWARI', 'SH. S SWAMINATHAN', 'SH. T S A AIYER', 'SH. KOVILOOR VIJAYARAGHAVACHARI SAMPATHKUMAR', 'SH. M KRISHNAN', 'SH. R N BANSAL', 'SH. N V RAMAN']
['SH. R VENKATARAMANI', 'SH. UTPALENDU ROY CHOUDHURY', 'SH. LAKSHMI NARAYANAN V', 'SH. PARIJAT KUMAR HORE', 'SH. B R VENKATESAN', 'SH. KISHAN GOPAL SOMANI', 'SH. O P GANERIWALA', 'SH. P T KUPPUSWAMY', 'SH. U P MATHUR', 'SH. N N UPADHYAY']
['SH. N K BHANDARI', 'SH. S R C SETTY', 'SH. S V BALASUBRAMANIAN', 'SH. HOSHIE HIRJI MALGHAM', 'SH. KAIKOBAD SORABJI ITALIA', 'SH. K SIVADAS', 'SH. K K SIVARAMAKRISHNAN', 'SH. A CHANDRASEKARAN', 'SH. R PONNAMBALAM', 'SH. T K B VENKATARAMAN']
['SH. NARINDER PAL', 'SH. PARKASH ATAM', 'SH. K A PARTHASARATHY', 'SH. SURESH CHANDRA OSWAL', 'SH. MAHENDRA KANTILAL SHAH', 'SH. V. SANTHANAKRISHNA', 'SH. VASANT NARAYAN GOGATE', 'SH. MANEKLAL
PATEL', 'SH. B N VISHWANATH', 'SH. B S L NARAYAN']
['SH. P L N VIJAYANAGAR', 'SH. SHREEPAD MARTAND KORDE', 'SH. SHIV BHAGWAN KOTHARI', 'SH. R B POPLAI', 'SH. RAMESH KHANNA', 'SH. RAVINDER NATH JOSHI', 'SH. VIDYA SAGAR AGGARWAL', 'SH. ARVIND JAYKUMAR CHAKOTE', 'SH. V RAMASESHAN', 'SH. BADRINARAYAN BALDAWA']
['SH. C GOVINDANKUTTY', 'SH. A G MADHAVAN', 'SH. DHIRAJ NATH BHATTACHARYYA', 'SH. RAMESHWAR LAL INANI', 'SH. RAMESHWARDAS C DAGA', 'SH. R SUBRAMANIAN', 'SH. S M REGE', 'SH. NARENDRA KUMAR KAPOOR', 'SH. K RAMAMURTHI', 'SH. ROOPENDRA NARAYAN ROY']
['SH. KALYAN KUMAR MITRA', 'SH. KALYANASUNDARAM ', 'SH. N A SESHADRI', 'SH. RAJENDRA KUMAR JAIN', 'SH. BISWAJIT SEN', 'SH. RAMKRISHNA NATHOOMAL AGRAWAL', 'SH. P C SHETH', 'SH. K S NATARAJAN',
'SH. S N DAMLE', 'SH. A M FADIA']
['DR. K N M RAO', 'SH. IYER M. RAMASWAMY', 'SH. DILIP KANTI MAZUMDAR', 'SH. RAM CHANDRA NIGAM', 'SH. SUBRAHMANIAM VISWANATHAN', 'SH. SURESH KUMAR JERATH', 'SH. A Y SRINIVASAN', 'DR. S C GARG',
'SH. CHANDRA PRAKASH SHARDA', 'SH. M P JAIN']
['SH. E S DWARKANATH', 'SH. MYSORE SHAMANNA RAMACHANDRA', 'SH. SUBHASH CHANDER SINGHAL', 'SH. T T SINHA', 'SH. G R BHANDARI', 'SH. M P GOEL', 'SH. CHOKKANATHAPURAM SUBRAMANIAN NATESAN', 'SH.
V M PATEL', 'SH. BIJOY KUMAR AGARWALLA', 'SH. BAHADUR CHAND JAIN']
person
αԋɱҽԃ αмєяιcαη
schedule
11.05.2020
__EVENTTARGET
- dan Anda mungkin harus mengirim semuanya - juga sebagai permintaanPOST
. PERTAMA: gunakan DevTools di Firefox/Chrome untuk melihat semua permintaan yang dikirim dari browser saat Anda membuka halaman berikutnya - dan lihat nilai apa yang dikirimkannya, dan apakah itu permintaanGET
atauPOST
. Kode Anda harus mengirimkan hal yang sama. - person furas   schedule 11.05.2020"{:02}".format(7)
untuk mendapatkan07
alih-alih7
dan kemudian Anda tidak perlu mencentangif len(str(page))==1:
(BTW: sebagai gantinyaif len(str(page))==1:
Anda cukup mencentangif page < 10:
) - person furas   schedule 11.05.2020payload.keys()
dan membandingkan dengan kunci yang dikirim di browser web maka saya melihat kunci yang tidak dikirim oleh browser - yaitu. tombol untuk tombol bertanda panah (untuk berpindah ke halaman pertama/terakhir/sebelumnya/berikutnya) dan mungkin menimbulkan masalah. yaitu.dnn$ctr410$MemberSearch$grdMembers$ctl00$ctl02$ctl01$ctl02
untuk tombol yang berpindah ke halaman pertama. - person furas   schedule 11.05.2020payload.pop('dnn$ctr410$MemberSearch$grdMembers$ctl00$ctl02$ctl01$ctl02')
di bagian bawah loop while untuk mengeluarkan kunci dari payload tetapi itu tampaknya tidak menyelesaikan masalah. Terima kasih. - person MITHU   schedule 11.05.2020...ctl28
untuk panah ke halaman berikutnya (tapi saya tidak yakin apakah itu tidak menggunakan nama yang berbeda jika halaman yang ditampilkan lebih sedikit). Saya tidak yakin tetapi halaman juga dapat menggunakan JavaScript untuk menghitung__EVENTVALIDATION
dan server dapat memeriksanya - tetapirequests
/bs4
tidak dapat menjalankan JavaScript. - person furas   schedule 11.05.2020