编程语言
首页 > 编程语言> > python – 如果name = hash则自动填充

python – 如果name = hash则自动填充

作者:互联网

我试图在python中使用mechanize自动填充表单中的文本框(多个框),但是框的名称是一个哈希,所以我不能像br.form [‘name’]那样自动输入输入=’blah’,因为该名称是来自散列函数的未知散列.有没有办法做到这一点?我在网上看过,但一直找不到任何东西.谢谢!

解决方法:

这应该适合你.显然,您需要更新谓词方法.另外,您有关于该领域的任何持续信息吗? id,class,label等?

import mechanize
import re

class MyBrowser:

    def __init__(self):
        self.user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)'
        self.cj = mechanize.LWPCookieJar()
        self.setup_browser(enable_debug=False)

    def find_by_crazy_name(self, control):
        if re.match('^[\w]{32,}$', control.name):
            return True
        return False

    def runit(self):
        self.agent.open('http://localhost')
        self.agent.select_form(name="foo")
        field = self.agent.form.find_control(predicate=self.find_by_crazy_name)
        field._value = "POOP"
        response = self.agent.submit()

    def enable_debug(self):
        self.agent.set_debug_http(True)
        self.agent.set_debug_redirects(True)
        self.agent.set_debug_responses(True)

    def setup_browser(self, enable_debug=False):
        self.agent = mechanize.Browser()
        self.agent.set_handle_redirect(True)
        self.agent.set_cookiejar(self.cj)
        self.agent.set_handle_referer(True)
        self.agent.set_handle_refresh(True)
        self.agent.set_handle_equiv(True)
        self.agent.set_handle_robots(False)
        self.enable_debug()
        self.agent.addheaders = [('User-Agent', self.user_agent)]


if __name__ == "__main__":
    browser = MyBrowser()
    browser.runit()

这只是填补了“POOP”的所有潜在领域.如果是32个字母数字字符(如md5),则字段匹配

标签:python,hash,mechanize,autofill
来源: https://codeday.me/bug/20190709/1412252.html