0

Python でキャプチャを解決して、登録フォームの送信を自動化する必要があります。ターゲット サイトは、ユーザーから詳細のリストを収集し、データ コールバック モードを介して Java スクリプトのフォームとして送信するように設計されていることに気付きました。以下のスニペットを添付 [1]。ブラウザ経由で試してみると、フォームが送信され、HTTPP 302 コードと確認メールを含む成功した登録ページにページがリダイレクトされます。Python [2] (cloudscraper/scrapy を使用) で実行しようとすると、成功した登録ページにリダイレクトされますが、詳細の登録も確認メールも受信されません。data-callback メソッドを呼び出して Python で Java スクリプトを実行する方法を教えてもらえますか?

[1] HTML コード:

<button class="g-recaptcha" data-callback="submitRuleOptin" data-sitekey="6LfbPnAUAAAAAAACqfb_YCtJi7RY0WkK-1T4b9cUO8">Sign up!</button>

<script>
function submitRuleOptin(token) { document.getElementById("rule-optin-form").submit(); }
<script>

[2] Python コード:

 # function is to process raffle entries
    def raffle_entry(self,url,suburl,proxy,accounts,auth=None):
        try:
            log('Entering raffle URL')
            i=0
            tk= self.get_sitekey(url,proxy)
            first_form = self.get_all_forms(url,proxy)[0]
            form_details = self.get_form_details(first_form)
            buttonvalue = form_details["button"]
            selectvalue = form_details["select"]
            log("Resolving Captcha")
            gresp=self.twocaptcha(tk,url) # Resolving 2Captch here !
            data = {}
            for individual_list in accounts:
                log("Constructing payload for the", individual_list[5])
                for input_tag,value_tag in zip(form_details["inputs"],individual_list):
                    if input_tag["type"] == "hidden":
                        data[input_tag["name"]] = input_tag["value"]
                    elif input_tag["type"] != "submit":
                        data[input_tag["name"]] = value_tag
                for button_tag in buttonvalue:
                    if button_tag["class"] == "g-recaptcha":
                        data["g-recaptcha-response"]=gresp
                data['fields[Raffle.Country]']="GB"
                log("Sending payload to the requested URL")
                parsedata=json.dumps(data)
                url = urljoin(url, form_details["action"])
                submit = self.scraper.post(url,data=parsedata,headers=self.json_headers,proxies={"http": proxy, "https": proxy})
                if submit.status_code == 200:
                    log("Your registration was sucessfull !!")
                    i += 1
                else:
                    log("Failed to register !!")
                with codecs.open("output.txt", 'w',encoding='utf-8') as outfile: # writing a text file with the ouput for future reference,
                    outfile.write(submit.text)
                soup = BeautifulSoup(submit.content, "html.parser")
                open("submit.html", "w").write(str(soup)) # writing a html file with the ouput for future reference,
            return i
        except cloudscraper.exceptions.CloudflareChallengeError as err:
            pass
        except requests.exceptions.RequestException as err:
            print(err)
4

0 に答える 0