Автоматизированный вход на сайт с использованием механизма python - PullRequest
1 голос
/ 06 марта 2012

Я пытаюсь автоматизировать вход на веб-сайт, форма входа которого имеет следующий HTML-код (отрывок):

<tr>
  <td width="60%">
    <input type="text" name="username" class="required black_text" maxlength="50" value="" />
  </td>
  <td>
    <input type="password" name="password" id="password" class="required black_text" maxlength="50" value="" />
  </td>
  <td colspan="2" align="center">
    <input type="image" src="gifs/login.jpg" name="Login2" value="Login" alt="Login" title="Login"/>
  </td>
</tr>

Я использую модуль Python mechanize для просмотра веб-страниц. Следующий код:

br.select_form(predicate=self.__form_with_fields("username", "password"))
br['username'] = self.config['COMMON.USER']
br['password'] = self.config['COMMON.PASSWORD']

try:
    request  = br.click(name='Login2', type='image')
    response = mechanize.urlopen(request)
    print response.read()

except IOError, err:
    logger = logging.getLogger(__name__)
    logger.error(str(err))
    logger.debug(response.info())
    print str(err)
    sys.exit(1)

def __form_with_fields(self, *fields):
    """ Generator of form predicate functions. """
    def __pred(form):
        for field_name in fields:
            try:
                form.find_control(field_name)
            except ControlNotFoundError, err:
                logger = logging.getLogger(__name__)
                logger.error(str(err))
                return False
            return True
    return __pred

Не уверен, что я делаю не так ...

Спасибо

Ответы [ 2 ]

1 голос
/ 13 апреля 2012

Возможно, сайт использует java-скрипт для отправки сообщений при входе в систему.Я хорошо помню, что для сайтов ASP .Net вам нужно было получить поля HIDDEN FORM, такие как VIEWSTATE и EVENTTARGET , и разместить их на новой странице.Почему бы вам не отправить ссылку на сайт в вопросе?После этого становится относительно легче разобраться

0 голосов
/ 30 мая 2017

Попробуйте использовать Selenium и PhantomJS

from selenium import PhantomJS
import platform



if platform.system() == 'Windows':      # .exe for Windows
    PhantomJS_path = './phantomjs.exe'
else:
    PhantomJS_path = './phantomjs'

service_args = [                        # Proxy (optional)
    '--proxy=<>',
    '--proxy-type=http',
    '--ignore-ssl-errors=true',
    '--web-security=false'
    ]

browser = PhantomJS(PhantomJS_path, service_args=service_args)
browser.set_window_size(1280, 720)      # Window size for screenshot (optional)
login_url = "<url_here>"

# Credentials
Username = "<insert>"
Password = "<insert>"



# Login
browser.get(login_url)
browser.save_screenshot('login.png')
print browser.current_url
browser.find_element_by_id("<username field id>").send_keys(Username)
browser.find_element_by_id("<password field id>").send_keys(Password)
browser.find_element_by_id("<login button id>").click()

print (browser.current_url)
browser.get(scrape_url)
print browser.page_source


browser.quit()
...