Документация MediaWiki с управлением доступом внешнего пользователя

Обзор

Похоже, у вас возникла проблема с XPATH, когда вы обнаружили, что кнопка «Отправить» или ваша кнопка «Отправить» недоступна, или к вашей кнопке «Отправить» прикреплены некоторые события на стороне клиента (javascript / etc ), которые необходимы для эффективной отправки страницы.

Вызов метода pw.submit () в большинстве случаев должен избавить от необходимости ждать, пока кнопка отправки станет кликабельной, и избежать проблем с поиском кнопки в большинстве случаев. На многих других веб-сайтах некоторые из необходимых внутренних процессов запускаются действиями на стороне клиента, которые выполняются после того, как кнопка «отправить» фактически нажата (хотя для примечания это не считается наилучшей практикой, поскольку сайт менее доступен и т. д., я отвлекся). Прежде всего, важно следить за выполнением вашего скрипта и следить за тем, чтобы на веб-странице не отображалось никаких заметных ошибок в отношении учетных данных, которые вы отправляете.

Кроме того, однако, некоторые веб-сайты требуют добавления определенного минимального промежутка времени между вводом имени пользователя, пароля и отправкой страницы, чтобы она считалась действительным процессом отправки. Я даже заходил на веб-сайты, которые требуют от вас использовать send_keys 1 для имен пользователей и паролей, чтобы избежать использования некоторых технологий защиты от взлома. В этих случаях я обычно использую следующее между вызовами:

from random import random, randint

def sleepyTime(first=5, second=10):
    # returns the value of the time slept (as float)
    # sleeps a random amount of time between the number variable in first
    # and the number variable second (in seconds)
    sleepy_time = round(random() * randint(first, second), 2)
    sleepy_time = sleepy_time if sleepy_time > first else (first + random())
    sleep(sleepy_time)
    return sleepy_time

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

Как бы я попытался ее решить

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchElementException, TimeoutException

TIME_TIMEOUT = 20 # Twenty-second timeout default

def eprint(*args, **kwargs):
    """ Prints an error message to the user in the console (prints to sys.stderr), passes
    all provided args and kwargs along to the function as usual. Be aware that the 'file' argument
    to print can be overridden if supplied again in kwargs.
    """
    print(*args, file=sys.stderr, **kwargs)


def login(driver):
    global _email, _password
    try:
        email = WebDriverWait(driver, TIME_TIMEOUT).until(EC.presence_of_element_located((By.XPATH, "//input[@id='user_email']")))
        pw = WebDriverWait(driver, TIME_TIMEOUT).until(EC.presence_of_element_located((By.XPATH, "//input[@id='password']"))
        pw.submit()
        # if this doesn't work try the following:
        # btn_submit = WebDriverWait(driver, TIME_TIMEOUT).until(EC.element_to_be_clickable((By.XPATH, "//button[@track-element='click-for-login']"))
        # btn_submit.click() 
        # if that doesn't work, try to add some random wait times using the 
        # sleepyTime() example from above to add some artificial waiting to your email entry, your password entry, and the attempt to submit the form.

except NoSuchElementException as ex:
    eprint(ex.msg())

except TimeoutException as toex:
    eprint(toex.msg)

if __name__ == '__main__':
    driver = webdriver.Chrome('/usr/bin/chromium/chromedriver',chrome_options=chrome_options)
    #d.get('https://www.google.nl/')
    #driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://www.goeventz.com/')
    if login(driver) is not None:
        print(create_event(driver))
5
задан Mogsdad 25 January 2018 в 15:05
поделиться

6 ответов

MediaWiki действительно не разработан для отключения просмотра страниц зарегистрированными пользователями. Я не думаю, что можно сделать это без некоторой боли.

Из (переформатированной) документации:

Чтобы иметь страницу обычно действуют некоторых пользователей, но быть невидимым для других, как возможно, например, в большей части программного обеспечения форума, совсем другой вопрос. MediaWiki разработан для двух основных режимов доступа:

  • Все могут просмотреть каждую страницу на Wiki (за возможным исключением нескольких специальных страниц). Это - режим, используемый Википедией и ее дочерними проектами.
  • Анонимные пользователи могут только просмотреть Основную Страницу и страницу входа в систему, и не могут отредактировать страницу. Это - в основном то же как вышеупомянутое, с точки зрения технической реализации (просто дополнительная проверка на каждый просмотр страницы), который является, почему это существует. Это - режим работы, используемый определенным частным wikis, таким как используемые различными комитетами Викимедиа.

Моя школа использует wikis путем, Вы хотите. Мой друг настроил их. Он должен был взломать программное обеспечение экстенсивно, чтобы заставить это работать. На основе моего опыта в рытье вокруг в MediaWiki, Вы находитесь в в течение забавного времени, пытаясь получить эту работу.

У Вас есть четыре опции

  • Получите плагин MediaWiki и имейте повреждение обновлений оно.
  • Взломайте его сами и восстановите работу каждый раз, когда Вы обновляете.
  • Используйте другое программное обеспечение Wiki.
  • Установите новую частную Wiki, как описано выше.
3
ответ дан 14 December 2019 в 19:25
поделиться

Вы могли создать Пространства имен MediaWiki и присвоить определенных пользователей конкретному пространству имен. Необходимо быть осторожными, хотя... страницы в новых пространствах имен не обнаруживаются по умолчанию в поисках на сайте, не редактируя файл LocalSettings.php. Обратитесь к документации для большего количества информации.

Посмотрите этот полусвязанный поток.

0
ответ дан 14 December 2019 в 19:25
поделиться

Как отмечали другие, это не ключевая особенность MediaWiki.

Самое простое решение - это иметь общедоступная и приватная вики со ссылками между вики. (Начните с копирования оригинальной вики и удаления ненужных страниц из общедоступной установки и добавления перенаправлений.)

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

1
ответ дан 14 December 2019 в 19:25
поделиться

Вы могли использовать расширение Ограничения доступа Страницы: http://www.mediawiki.org/wiki/Extension:Page_access_restriction и группы, чтобы сделать это.

Однако MediaWiki не рекомендует сделать это...

(Украденный от моего ответа до вопроса о Переполнении стека платежный шлюз MediaWiki.)

0
ответ дан 14 December 2019 в 19:25
поделиться

Звучит так, будто вы пытаетесь взять MediaWiki в такие места, куда он не обязательно хочет идти, поэтому я предложил бы выбрать лучший инструмент .

Что касается вики, то мы прошли через этап MediaWiki, но в конечном итоге пошли с MindTouch Deki , потому что он просто выглядит и действует лучше, и им легче управлять (для таких вещей, как контроль доступа). Вы можете найти все подробности на их сайте, я могу просто сказать, что он отлично работал прямо из коробки.

Здесь есть хорошая часть: теперь доступен конвертер MediaWiki в Deki . Я не могу ручаться за это (быть новым и всем), но так как все части бесплатны, я предлагаю вам занять несколько часов и попытаться увидеть, что вы можете получить, вам может понравиться результат.

1
ответ дан 14 December 2019 в 19:25
поделиться

Если вы назовете страницу X / Y , ссылка будет wiki / X / Y , что означает, что вы можете установить права доступа в любом хорошем прокси, например, в Apache HTTP на основе «каталога». Вы можете подключить прокси к домену Windows или просто к списку имен пользователей.

0
ответ дан 14 December 2019 в 19:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: