Nano Hash - криптовалюты, майнинг, программирование

Как использовать mechanize для ввода имени пользователя и пароля

Я пытаюсь использовать mechanize для очистки веб-сайта, который требует от меня входа в систему. Вот начало моего кода.

#!/usr/bin/python

#scrape the admissions part of SAFE

import mechanize
import cookielib
from BeautifulSoup import BeautifulSoup
import html2text

# Browser
br = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

br.addheaders = [('User-agent', 'Chrome')]

# The site we will navigate into, handling it's session
br.open('https://url')

# View available forms
for f in br.forms():
    print f

Это дает мне

<POST https://userstuff application/x-www-form-urlencoded
  <HiddenControl(lt=LT-227363-Ja4QpRvdxrbQF0nb7XcR2jQDydH43s) (readonly)>
  <HiddenControl(execution=e1s1) (readonly)>
  <HiddenControl(_eventId=submit) (readonly)>
  <TextControl(username=)>
  <PasswordControl(password=)>
  <SubmitButtonControl(submit=) (readonly)>
  <CheckboxControl(warn=[on])>>

Как мне теперь ввести логин и пароль?

Я пытался

# Select the first (index zero) form 
br.select_form(nr=0)

# User credentials
br.form['username'] = 'username'
br.form['password'] = 'password'

# Login
br.submit()

Но это, кажется, не работает.

10.03.2016

  • Вы пробовали br.submit()? 10.03.2016
  • @PadraicCunningham Да, извините. Я случайно пропустил это в своем вопросе. 10.03.2016
  • можешь поделиться ссылкой? 10.03.2016
  • Можете ли вы предоставить html формы, которую вы пытаетесь отправить? Вам нужно подтвердить, что имена ввода формы на самом деле username и password 10.03.2016
  • @user3195487 user3195487 Я действительно новичок в этом, но вывод, который я привел ниже, дает мне не ответить на это? 10.03.2016
  • @ user3195487, это в теле вопроса 10.03.2016
  • @ user3195487 Основная часть html — это bpaste.net/show/1d9cfaeb727c (слегка отредактировано) 10.03.2016
  • @PadraicCunningham Я вставил основную часть формы чуть выше. 10.03.2016
  • Идентификатор формы: fm1 stackoverflow.com/questions/10495313/, вы можете попробовать использовать это в случае, если вы выбираете неправильный вариант, если это не сработает, значит, происходит что-то еще, и, не видя реальной ссылки, будет трудно сказать, что не так. 10.03.2016
  • @PadraicCunningham, о, на самом деле, я думаю, что есть еще один экран, который нужно пройти! Это форма ‹POST url application/x-www-form-urlencoded ‹HiddenControl(choice=sso) (только для чтения)› ‹HiddenControl(target=/Teaching/Resources/) (только для чтения)› ‹SubmitControl(‹None›=Выбрать единый вход) (только для чтения)›› . Мне просто нужно нажать кнопку «Отправить», я считаю. 10.03.2016
  • @PadraicCunningham теперь все работает .. не могли бы вы опубликовать ответ, чтобы я мог его принять? 10.03.2016
  • @eleanora, вы можете добавить ответ о том, что сработало, и получить репутацию для себя. 10.03.2016

Ответы:


1

В конце концов это сработало для меня

#!/usr/bin/python

#scraper

import mechanize
import cookielib
from BeautifulSoup import BeautifulSoup
import html2text

# Browser
br = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

br.addheaders = [('User-agent', 'Chrome')]

# The site we will navigate into, handling it's session
br.open('url1')

# View available forms
for f in br.forms():
    if f.attrs['id'] == 'fm1':
        br.form = f
        break

# User credentials
br.form['username'] = 'password'
br.form['password'] = 'username'

# Login
br.submit()

#Now we need to confirm again

br.open('https://url2')

# Select the first (index zero) form 
br.select_form(nr=0)

# Login
br.submit()

print(br.open('https:url2').read())
10.03.2016

2

Я бы посмотрел на html-форму, а не на то, что вам дает механизация. Ниже приведен пример формы, которую я пытался заполнить в прошлом.

<input type="text" name="user_key" value="">
<input type="password" name="user_password">

Ниже приведен код, который я использую для входа на этот сайт, используя форму выше.

# Browser
br = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_refresh(False) 
br.set_handle_referer(True)
br.set_handle_robots(False)

# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

# User-Agent
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

# The site we will navigate into, handling it's session
br.open('https://www.website.com/login')

#select the first form
br.select_form(nr=0)

#user credentials
br['user_key'] = '[email protected]'
br['user_password'] = 'mypassword'

# Login
br.submit()

link = 'http://www.website.com/url_i_want_to_scrape'

br.open(link)
response = br.response().read()
print response

Ваша проблема может заключаться в том, что вы либо выбираете неправильную форму, указав неправильные имена полей.

10.03.2016
  • Я показываю пример времени, когда я столкнулся с той же проблемой, и способ ее решения. Конечно, сайты разные, но этот метод можно использовать и в его/ее случае. 10.03.2016
  • Я получаю сообщение об ошибке AttributeError: объект типа «CookieJar» не имеет атрибута «LWPCookieJar», когда я использую это. Хотя я импортировал cookielib (теперь он называется cookiejar). Любые идеи? 27.07.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..