Talaan ng mga Nilalaman:

Spidering isang Ajax Website Na May isang Asynchronous Form na Pag-login: 6 na Hakbang (na may Mga Larawan)
Spidering isang Ajax Website Na May isang Asynchronous Form na Pag-login: 6 na Hakbang (na may Mga Larawan)

Video: Spidering isang Ajax Website Na May isang Asynchronous Form na Pag-login: 6 na Hakbang (na may Mga Larawan)

Video: Spidering isang Ajax Website Na May isang Asynchronous Form na Pag-login: 6 na Hakbang (na may Mga Larawan)
Video: Jax - Victoria’s Secret [Official Audio] 2024, Nobyembre
Anonim
Spidering isang Ajax Website Sa Isang Asynchronous na Form sa Pag-login
Spidering isang Ajax Website Sa Isang Asynchronous na Form sa Pag-login

Ang problema: Hindi pinapayagan ng mga tool sa Spidering ang pagpapatotoo sa pag-login ng AJAX.

Ipapakita sa iyo ng itinuturo na ito kung paano mag-login sa pamamagitan ng isang form na AJAX gamit ang Python at isang module na tinatawag na Mechanize. Ang mga gagamba ay mga programa sa pag-aautomat ng web na nagiging popular na paraan para sa mga tao na makalikom ng data sa online. Gumapang sila sa paligid ng web na nagtitipon ng mga mahahalagang materyales upang maitaguyod ang pinakamakapangyarihang mga kumpanya sa web sa paligid. Ang iba ay gumagapang at nangangalap ng mga tukoy na hanay ng data upang mapabuti ang paggawa ng desisyon, o mahihinuha kung ano ang kasalukuyang "nasa", o makahanap ng pinakamurang mga ruta sa paglalakbay. Ang mga gagamba (web crawler, webbots, o screen scraper) ay mahusay para sa paggawang HTML goop sa ilang pagkakahawig ng matalinong data, ngunit mayroon kaming problema pagdating sa mga webpage na pinagana ng AJAX na mayroong mga session na naka-JavaScript at cookie na hindi nai-navigate nang normal hanay ng mga tool sa spidering. Sa pagtuturo na ito maa-access namin ang aming sariling pahina ng miyembro sa pubmatic.com. Ipapakita sa iyo ng mga hakbang na ito ang isang pamamaraan na susundan, ngunit magkakaiba ang iyong pahina. Magsaya ka!

Hakbang 1: Ipunin ang Mga Materyales

Ipunin ang Mga Materyales
Ipunin ang Mga Materyales

Kakailanganin mong simulang dagdagan ang iyong mga mapagkukunan sa programa. Kakailanganin mo ang mga sumusunod na programa. Gamitin ang kanilang mga gabay upang matulungan kang mai-install ang mga ito… I-install ang FirebugIto ay isang addon ng FirefoxPag-install ng PythonGo sa: python.orgPunta sa: python.orgI-install ang Modyul ng MekanismoKumuha ng Mekanisang Kumuha ng MekanismoIba pang mga kapaki-pakinabang na tool sa Spidering: BeautifulSoup

Hakbang 2: Hanapin ang Kinakailangan ng Mga Header upang Lumikha ng isang Session

Ang isang mahusay na gagawing gagamba ay mag-a-access sa isang webpage na para bang isang browser na kinokontrol ng isang tao na pinapanatili ang mga pahiwatig na ito ay tunay na pinagmulan na nakatago. Ang bahagi ng pakikipag-ugnayan sa pagitan ng mga browser at server ay nangyayari sa pamamagitan ng mga kahilingan sa GET at POST na maaari mong makita sa mga header (ang impormasyong ito ay bihirang ipinakita sa isang browser, ngunit napakahalaga). Maaari mong tingnan ang ilang impormasyong ito sa pamamagitan ng pagpindot sa Ctrl I (sa firefox) upang buksan ang window ng Impormasyon ng Pahina. Upang magkaila ang iyong sarili bilang isang banayad na ugali ng browser dapat mong kilalanin ang iyong sarili gamit ang parehong mga kredensyal. Kung sinubukan mong mag-log in sa pubmatic na may naka-disable na javascript sa iyong browser hindi ka makakakuha ng napakalayo dahil ang mga pag-redirect ay tapos na sa pamamagitan ng javascript. Kaya't isinasaalang-alang na ang karamihan sa mga spider browser ay walang mga tagasalin ng javascript na makukuha namin sa pamamagitan ng pag-login sa pamamagitan ng isang alternatibong daanan. Magsimula tayo sa pamamagitan ng pagkuha ng impormasyon ng header na ipinadala mula sa browser kapag na-click mo ang isumite. Kung ito ay isang ordinaryong pag-login sa browser gagamitin mo ang Mechanize upang punan ang form at i-click ang isumite. Ang mga normal na form sa pag-login ay naka-encapsulate sa loob ng isang… tag at ang mekanismo ay maaaring isumite ito at i-poll ang susunod na pahina nang walang problema. Dahil wala kaming nakumpletong form tag, ang function ng pagsusumite ay pinangangasiwaan ng javascript. Suriin natin ang function na magsumite ng Pubmatic. Upang magawa ito, buksan muna ang webpage sa firefox at i-on ang firebug sa pamamagitan ng pag-click sa alitaptap sa ibabang kanang sulok. Pagkatapos i-click ang tab na script, kopyahin ang lahat ng code na lilitaw at i-paste ito sa iyong paboritong piraso ng pag-edit ng teksto ng software. Maaari mo ring tanggalin ang lahat ng code maliban sa pagpapaandar na isumiteForm. Nagsisimula ito sa pag-andar na "submitForm (theform) {" at lahat ng nasa pagitan nito at ng mga function na pagsasara ng curly bracket "}". Sa pag-aralan ang pagpapaandar na ito, napansin lamang namin na ang ilang pagpapatotoo ay nangyayari na nagbabalik ng isang variable na tinatawag na xmldoc na na-parse bilang xml. Ito ay isang pangunahing tampok ng AJAX na-polled nito ang server at ibinalik ang ilang XML na dokumento na naglalaman ng isang puno ng impormasyon. Naglalaman ang node session_id ng session_id kung matagumpay ang pagpapatotoo, maaari mo itong sabihin sa pamamagitan ng pagtingin sa kaunting code na ito: "kung (session_id! = Null) {// matagumpay sa pag-login". Ngayon nais naming pigilan ang kaunting javascript na ito mula sa pagdadala sa amin kahit saan upang makita namin kung ano ang nai-post sa server sa panahon ng pagpapatotoo. Upang magawa ito, magkomento kami sa anumang mga pag-redirect ng window na ganito ang hitsura: "window.location = …". Upang magkomento ito magdagdag ng dobleng mga slash bago ang mga ito tulad ng: "//window.location…" pinipigilan nito ang code mula sa pagpapatakbo. Maaari mong i-download ang Javascript file sa ibaba kung saan mayroon nang mga pag-edit na ito. Kopyahin at i-paste ang na-edit na bit ng javascript na ito sa console windows kanang kamay at i-click ang run. Ino-override nito ang pagpapaandar ng javascript na nasa pahina kasama ang aming bagong bersyon. Ngayon kapag pinunan mo ang iyong mga kredensyal at i-click ang isumite dapat mong makita ang POST at makakuha ng impormasyon ng header punan ang console, ngunit hindi ka pupunta kahit saan. Ang impormasyong POST ay ang impormasyon na kinunan sa server ng mga pagpapaandar ng AJAX, nais mong maging mas maraming tulad nito hangga't maaari, kopyahin at i-paste ang impormasyong iyon sa isang notepad.

Hakbang 3: Ihanda ang Code

Bago namin idagdag ang mga bagong header na nakita namin lumikha muna kami ng isang naka-template na Mechanize login python code. Ginagawa namin ito sa dalawang kadahilanan, una sa gayon mayroon kaming isang sangkap na gumagana upang magdagdag ng mga bagong bagay at pangalawa upang makita mo kung paano ka normal na mag-login sa isang hindi AJAX-y webpage. Buksan ang notepad o katumbas, at kopyahin at i-paste ang sumusunod. Kapag tapos mo na itong i-save bilang youfilename.py sa isang lugar na mahahanap mo. #! / Usr / bin / python # - * - coding: utf-8 - * - # Magsimula sa iyong mga pag-import ng module: mula sa pag-import ng mekanismo ng Browser #Likhain ang iyong halimbawa ng browser sa pamamagitan ng pag-andar ng Browser () na tawag; br = Browser () # Itakda ang browser upang hindi nito pansinin ang mga kahilingan sa spider.txt # Gawin itong maingat, kung ang webpage ay hindi gusto ng mga spider, baka mapataob sila na makita ka doon.set_handle_robots (Mali) #Buksan ang pahina na nais mong mag-login tobr.open ("https://pubmatic.com/04_betasignin.jsp") # Dahil alam ko ang pangalan ng form, mapipili ko lang ang form sa pamamagitan ng namebr.select_form ("pag-login") # Gamit ang mga pangalan ng mga elemento ng form na inilalagay ko ang mga pangalan ng form elementbr ['email'] = "[email protected]" br ['password'] = "Asquid22" # br.submit () nagpapadala ng form at hinihila ang nagresultang pahina, lumikha ka ng isang bagong halimbawa ng browser sa # na naglalaman ng nagresultang pageresponse = br.submit () # Ipi-print nito ang katawan ng webpage na natanggap # print response.read ()

Hakbang 4: Ipadala ang Tamang Mga Signal

Ipadala ang Tamang Mga Sinyales
Ipadala ang Tamang Mga Sinyales

Ang Mekanis ay may madaling pag-andar upang magdagdag ng mga header sa mga header POST, papayagan kaming lumitaw sa parehong browser na ginamit mo upang ma-access ang pahina sa unang pagkakataon. Buksan ang file sa mga header na iyong nahanap gamit ang Firebug at i-edit ang text file na ito upang tumugma. Palitan ang lahat ng bagay sa mga quote ng wastong item mula sa listahan ng header: USER_AGENT = "Mozilla / 5.0 (X11; U; Linux i686; tr-TR; rv: 1.8.1.9) Gecko / 20071102 Pardus / 2007 Firefox / 2.0.0.9" HOST = "pubmatic.com" ACCEPT = "text / xml, application / xml, application / xhtml + xml, text / html; q = 0.9, text / plain; q = 0.8, imahe / png, * / *; q = 0.5 "ACCEPT_LANGUAGE =" en-us, en; q = 0.5 "ACCEPT_ENCODING =" gzip, deflate "ACCEPT_CHARSET =" ISO-8859-1, utf-8; q = 0.7, *; q = 0.7 "KEEP_ALIVE =" 300 " CONNECTION = "keep-alive" CONTENT_TYPE = "application / x-www-form-urlencoded" REFERER = "https://pubmatic.com/04_betasignin.jsp"CONTENT_LENGTH =" 60 "COOKIE =" utma = 103266945.1970108054.1210113004.1212104087; KADUSERCOOKIE = EA2C3249-E822-456E-847A-1FF0D4085A85; utmz = 103266945.1210113004.1.1.utmccn = (direkta) | utmcsr = (direkta) | utmcmd = (wala); JSESSIONID = 60F194BE2At2c6d6t6t6t52d6t3t52d3f3f1f1f1f1f3w3pd4p4pd6p4pd6p4pd6p8pd6p8pdpdp no-cache "CACHE_CONTROL =" no-cache "Lumilikha ito ng isang hanay ng mga variable na maaari mong magamit upang idagdag sa header sa amin ing this code: br.add_header = [("Host", HOST)] br.add_headers = [("User-agent", USER_AGENT)] br.add_headers = [("Accept", ACCEPT)] br.add_header = [("Tanggapin ang Wika", ACCEPT_LANGUAGE)] br.add_headers = [("Accept-Encoding", ACCEPT_ENCODING)] br.add_headers = [("Accept-Charset", ACCEPT_CHARSET)] br.add_header = [("Keep-Alive ", KEEP_ALIVE)] br.add_headers = [(" Connection ", CONNECTION)] br.add_header = [(" Content-Type ", CONTENT_TYPE)] br.add_header = [(" Referer ", REFERER)] br.add_header = [("Haba ng Nilalaman", CONTENT_LENGTH)] br.add_headers = [("Cookie", COOKIE)] br.add_headers = [("Pragma", PRAGMA)] br.add_headers = [("Cache-Control", CACHE_CONTROL)] Ngayon kapag tinawagan namin ang pahina na buksan ang pagpapaandar ang mga header ay ipapadala din sa server. br.open ("https://pubmatic.com/04_betasignin.jsp")

Hakbang 5: Mga Mekanikal na Cookie

Mekanikal na Cookie
Mekanikal na Cookie

Ang hakbang na ito ay dahil sa automate ng automate ang paghawak ng cookie, ngunit mahalagang malaman kung ano ang nangyayari:

Kapag naisumite ang form mayroon kang mga tamang header na parang nagsumite ka gamit ang javascript function. Pagkatapos ay patotohanan ng server ang impormasyong ito at bumubuo ng isang session ID at nai-save ito sa isang cookie kung ang username at password ay tama. Ang magandang balita ay awtomatikong kumakain at nagrerehistro ng cookies ang Mechanize kaya't hindi mo kailangang magalala tungkol sa pagpapadala at pagtanggap ng cookie. Kaya't sa sandaling lumikha ka ng isang session ID na gumagana maaari mo nang ipasok ang seksyon lamang ng mga miyembro ng website.

Hakbang 6: Susi sa Puso

Ngayon na nakakuha kami ng isang session ID at nai-save ito ng Mechanize sa mga cookies na maaari naming sundin ang javascript upang makita kung saan namin kailangang pumunta. Naghahanap sa loob ng "if (session_id! = Null) {// matagumpay sa pag-login" upang makita kung saan magtatagumpay. Tumitingin sa window relocation code: "if (adurlbase.search (/pubmatic.com/)! = -1) {window.location =" https://pubmatic.com/05_homeloggedin.jsp "+"? V = "+ Math.random () * 10000; " nakikita namin na kailangan naming pumunta sa isang website na matatagpuan sa https://pubmatic.com/05_homeloggedin.jsp?v=some random na numero. Gumawa lang tayo ng isang pekeng random na numero upang ipasok at lumikha ng isang bagong halimbawa ng browser upang mabasa ang bagong bukas na pahina: response2 = br.open ("https://pubmatic.com/05_homeloggedin.jsp?v=2703") At dapat iyon maging kayo Kumpleto na ang iyong code, sa pamamagitan ng paggamit ng wastong mga header at mekanismo ng cookie sa cookie maaari na nating ma-access ang mga loob ng pubmatic. Buksan ang terminal, i-load ang python package sa ibaba at mag-login palayo. Upang gawin ang ganitong uri ng python2.5 at pagkatapos ang filepath sa.py file.

Inirerekumendang: