Какие ошибки могут остаться незамеченными, если не проверять прокрутку просмотра программы

Обновлено: 05.07.2024

Компонент, обертывающий платформу ScrollView и обеспечивающий интеграцию с системой "ответчика" с сенсорной блокировкой.

Имейте в виду, что ScrollViews должны иметь ограниченную высоту для работы, так как они содержат дочерние элементы неограниченной высоты в ограниченном контейнере (через взаимодействие прокрутки). Чтобы ограничить высоту ScrollView, либо установите высоту представления напрямую (не рекомендуется), либо убедитесь, что все родительские представления имеют ограниченную высоту. Если вы забудете передать вниз по стеку представлений, это может привести к ошибкам, которые инспектор элементов быстро отлаживает.

Пока не поддерживает блокировку этого представления прокрутки другими автоответчиками в автоответчике.

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

Именно здесь в игру вступает FlatList. FlatList отображает элементы лениво, когда они вот-вот появятся, и удаляет элементы, которые прокручиваются далеко за пределы экрана, чтобы сэкономить память и время обработки.

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

Компонент React, который будет использоваться для рендеринга закрепленных заголовков, следует использовать вместе с stickyHeaderIndices. Вам может понадобиться установить этот компонент, если ваш липкий заголовок использует настраиваемые преобразования, например, если вы хотите, чтобы ваш список имел анимированный и скрываемый заголовок. Если компонент не указан, будет использоваться компонент ScrollViewStickyHeader по умолчанию.

Если установлено значение true, прокрутка подпрыгивает по горизонтали, когда достигает конца, даже если содержимое меньше, чем сама прокрутка.

ТипПо умолчанию
bool true при горизонтальном расположении = false иначе

Если задано значение true, прокрутка подпрыгивает по вертикали, когда достигает конца, даже если содержимое меньше, чем сама прокрутка.

ТипПо умолчанию
bool false при вертикальном расположении = true иначе

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

Если задано значение true, вид прокрутки отскакивает, когда достигает конца содержимого, если содержимое больше, чем представление прокрутки по оси направления прокрутки. При значении false он отключает все подпрыгивания, даже если свойства alwaysBounce* имеют значение true .

Если задано значение true , жесты могут увеличивать масштаб за пределы минимального/максимального значения, и масштаб будет анимироваться до минимального/максимального значения в конце жеста, в противном случае масштаб не превысит пределов.

Если задано значение true , прокрутка автоматически центрирует содержимое, если оно меньше, чем границы прокрутки; когда содержимое больше, чем область прокрутки, это свойство не действует.

Эти стили будут применены к контейнеру содержимого представления прокрутки, который охватывает все дочерние представления. Пример:

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

ТипПо умолчанию
enum('automatic', 'scrollableAxes', ' никогда' , 'всегда' ) 'никогда'

Число с плавающей запятой, определяющее, насколько быстро прокрутка замедляется после того, как пользователь поднимает палец. Вы также можете использовать сокращения строк «обычный» и «быстрый», которые соответствуют базовым настройкам iOS для UIScrollViewDecelerationRateNormal и UIScrollViewDecelerationRateFast соответственно.

  • нормальный – 0,998 для iOS, 0,985 для Android.
  • 'fast' , 0,99 на iOS, 0,9 на Android.

Если задано значение true, прокрутка останавливается на следующем индексе (относительно положения прокрутки при отпускании) независимо от скорости жеста. Это можно использовать для разбиения на страницы, когда страница меньше ширины горизонтального ScrollView или высоты вертикального ScrollView.

Если задано значение true, ответчик панорамирования JS по умолчанию в ScrollView отключен, а полный контроль над касаниями внутри ScrollView остается за его дочерними компонентами. Это особенно полезно, если включен snapToInterval, так как он не соответствует типичным схемам касания. Не используйте это в обычных случаях использования ScrollView без snapToInterval, так как это может привести к неожиданным касаниям во время прокрутки.

Иногда прокрутка занимает больше места, чем ее содержимое. В этом случае этот реквизит заполнит остальную часть прокрутки цветом, чтобы избежать установки фона и создания ненужного перерисовки.Это расширенная оптимизация, которая в общем случае не нужна.

Если значение больше 0 , исчезающие края будут установлены в соответствии с текущим направлением и положением прокрутки, указывая, есть ли еще контент для отображения.

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

  • 'по умолчанию' такой же, как черный .
  • 'black' , индикатор прокрутки черный . Этот стиль хорош на светлом фоне.
  • 'white' , индикатор прокрутки белый . Этот стиль хорош на темном фоне.

Если липкие заголовки должны оставаться внизу, а не вверху ScrollView. Обычно это используется с перевернутыми ScrollViews.

  • 'none' , перетаскивание не сбрасывает клавиатуру.
  • 'on-drag' , когда начинается перетаскивание, клавиатура закрывается.
  • 'interactive' , клавиатура закрывается интерактивно при перетаскивании и перемещается синхронно с касанием, перетаскивание вверх отменяет закрытие. В Android это не поддерживается и будет вести себя так же, как и «нет».
  • Нажатие «никогда» за пределами выделенного текста, когда клавиатура поднята, отключает клавиатуру. В этом случае дети не получат кран.
  • 'always' , клавиатура не будет закрываться автоматически, а представление прокрутки не будет улавливать касания, но дочерние элементы представления прокрутки могут улавливать касания.
  • 'handled' , клавиатура не будет закрываться автоматически, если касание было обработано дочерними элементами представления прокрутки (или захвачено предком).
  • false , устарело, вместо этого используйте "никогда"
  • true , устарело, вместо этого используйте "всегда"

Если установлено, представление прокрутки будет регулировать положение прокрутки таким образом, чтобы первый дочерний элемент, видимый в данный момент и находящийся на уровне minIndexForVisible или за его пределами, не менял положение. Это полезно для списков, которые загружают контент в обоих направлениях, например. ветка чата, где новые поступающие сообщения могут в противном случае привести к скачку положения прокрутки. Обычно используется значение 0, но другие значения, такие как 1, можно использовать для пропуска загрузки счетчиков или другого контента, который не должен сохранять позицию.

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

Предупреждение 1: изменение порядка элементов в прокрутке с включенным этим параметром, вероятно, вызовет дрожание и рывки. Это может быть исправлено, но в настоящее время это не планируется. На данный момент не изменяйте порядок содержимого любых ScrollViews или списков, использующих эту функцию.

Монитор подключен к компьютеру, но ничего не отображает. Используйте шаги, описанные в этом документе, чтобы решить эту проблему или определить, неисправен ли монитор.

Прежде чем начать

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

Шаг 1. Проверка питания

Отсоедините видеокабель от монитора и убедитесь, что кабель питания монитора подключен к розетке.

При подключенном мониторе нажмите кнопку питания на мониторе. На корпусе монитора должен быть индикатор питания. Что происходит со светом?

Если индикатор питания не горит, когда вы нажимаете кнопку питания, либо на монитор не подается питание, либо он неисправен. Перед обслуживанием или заменой монитора проверьте все следующие элементы:

Шаг 2. Отображение встроенного сообщения на экране

Если на мониторе появляется сообщение, панель дисплея работает и проблема связана с видеосигналом. Дальнейшие действия по устранению неполадок см. в разделе Сообщение об отсутствии сигнала, Сигнал вне диапазона, Спящий режим или Энергосбережение.

Шаг 3. Устранение плохого видеосоединения

Проверьте, нет ли согнутых или сломанных контактов разъема или сломанных контактов, застрявших в отверстиях видеоразъема на компьютере. При выключенном мониторе и компьютере выпрямите согнутые штифты с помощью небольшой металлической трубки, например кончика пустого механического карандаша или кончика вытянутой ручки. Если какой-либо из контактов отломился от кабеля и застрял в маленьких отверстиях видеоразъема (на компьютере), удалите сломанные контакты с помощью металлической швейной булавки (или аналогичной тонкой металлической булавки с острием). .

Подключите другой видеокабель к компьютеру и монитору. По возможности используйте другой кабель. Например, если ваш монитор оснащен разъемом HDMI и разъемом DVI, по возможности используйте другой тип кабеля. В противном случае используйте новый кабель того же типа.

Шаг 4. Проверка видеосоединения

Если монитор остается пустым, подключите монитор к другому компьютеру с помощью другого кабеля, чтобы определить, неисправен ли монитор. Перейдите к шагу подключения монитора к другому компьютеру.

Если на мониторе отображаются экраны запуска, но не отображается Windows, выполните следующие действия, чтобы настроить компьютер на совместимое разрешение:

Найдите исходное разрешение экрана для своего монитора в руководстве пользователя или в спецификациях продукта для модели монитора. Если вам не удается найти исходное разрешение экрана для вашей модели монитора, временно используйте 1024 x 768 для устранения неполадок.

Если вы используете Windows Vista, выберите Включить видео с низким разрешением (640 x 480) , нажмите Enter и дождитесь открытия Windows.

Если вы используете Windows XP, выберите Включить режим VGA , нажмите Enter и дождитесь открытия Windows. Продолжайте выполнять эти шаги, чтобы установить разрешение экрана.

Если вы используете Windows 98 или ME, выберите Безопасный режим и выполните следующие действия, чтобы войти в стандартный режим VGA:

После открытия Windows щелкните правой кнопкой мыши свободное место на рабочем столе и выберите "Свойства" (Windows XP, 98/Me) или "Персонализация" (Windows Vista).

В Windows Vista выберите исходное разрешение экрана с помощью ползунка Разрешение. Установите для цветов максимальное значение (32 бита).

В Windows XP выберите собственный размер разрешения экрана с помощью ползунка Разрешение экрана. Установите качество цвета на самое высокое (32 бита) .

В Windows 98 или Me выберите исходное разрешение экрана с помощью ползунка «Область экрана». Установите для цветов значение True Color .

Если вас устраивают новые настройки дисплея, нажмите «Да» в окне «Настройки монитора». Если вы не удовлетворены или если экран просто становится черным, подождите: Windows вернет экран в прежнее состояние. Пробуйте другие настройки, пока не найдете конфигурацию дисплея, совместимую с монитором и отвечающую вашим потребностям.

Если исходное разрешение недоступно, загрузите и установите обновленный видеодрайвер для своего компьютера. Обновление программного обеспечения видеодрайвера может добавить больше разрешений (графических режимов).

Перезагрузите компьютер. Теперь монитор должен отображать полноэкранное изображение в высоком качестве. Готово.

Шаг 5. Подключение монитора к другому компьютеру

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

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

Внешние жесткие диски служат для резервного копирования самых важных файлов, но что делать, если они выходят из строя? Вот что делать, если ваше устройство не определяется в Windows и Mac.


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

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

Убедитесь, что он подключен к сети и включен

Я знаю, знаю, но выслушайте меня: то, что вы подключили накопитель к компьютеру, не означает, что он обязательно получает необходимое питание. В то время как некоторые накопители могут потреблять достаточно энергии от USB-порта вашего компьютера, другим — особенно большим накопителям, не предназначенным для переноски, например, Western Digital My Book — может потребоваться питание от сети для раскрутки.

Если ваш накопитель поставляется с адаптером питания переменного тока, но вы его не подключили, попробуйте подключить его (и нажать кнопку питания, если она есть). Если в комплекте два разъема USB, убедитесь, что они оба подключены к компьютеру. Если повезет, ваш диск будет нормально отображаться, как только он наберет необходимую мощность.

Попробуйте другой порт USB (или другой компьютер)

Если накопитель по-прежнему не работает, отключите его и попробуйте использовать другой порт USB. Возможно, рассматриваемый порт неисправен или просто не подходит к вашему конкретному диску. Если он подключен к порту USB 3.0, попробуйте порт USB 2.0. Если он подключен к USB-концентратору, попробуйте вместо этого подключить его напрямую к ПК. Вы также можете попробовать это на другом компьютере.

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

Обновите драйверы

Иногда в Windows возникают проблемы с драйверами, из-за которых устройство становится неузнаваемым. Откройте меню «Пуск», введите «диспетчер устройств» и нажмите Enter, когда появится опция. Разверните меню «Дисковые накопители» и меню «Универсальная последовательная шина», чтобы увидеть, присутствует ли ваш внешний накопитель в одном из наборов. Если вы видите запись, которая выглядит как ваш диск с желтым восклицательным знаком, щелкните правой кнопкой мыши устройство и выберите «Свойства» — вы можете найти код ошибки, который вы можете найти в Google. Вы также можете перейти на вкладку «Драйвер» и попробовать обновить или удалить драйвер и перезагрузить компьютер.

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

Лучшие предложения на внешние жесткие диски на этой неделе*

  • Портативный внешний жесткий диск WD My Passport емкостью 5 ТБ с интерфейсом USB 3.0 за 109,99 долларов США(цена по прейскуранту – 149,99 долларов США)
  • Портативный внешний жесткий диск WD Elements емкостью 1 ТБ с интерфейсом USB 3.0 за 47,99 долларов США(цена по прейскуранту – 84 доллара США)
  • Внешний жесткий диск USB 3.0 для настольных ПК 14 ТБ WD Elements за 249,62 долларов США(цена по прейскуранту – 379,99 долларов США)
  • Портативный твердотельный накопитель Samsung T7 емкостью 1 ТБ с интерфейсом USB-C за 114,99 долларов США(цена по прейскуранту – 169,99 долларов США)
  • Портативный твердотельный накопитель SanDisk Extreme емкостью 1 ТБ с интерфейсом USB-C за 134 доллара США(цена по прейскуранту 249,99 доллара США)

*Предложения выбираются нашим партнером TechBargains

Включить и отформатировать диск в управлении дисками

Если ваш накопитель включен, но по-прежнему не отображается в проводнике, пора заняться поиском информации. Откройте меню «Пуск» и введите «Управление дисками» и нажмите Enter, когда появится опция «Создание и форматирование разделов жесткого диска». После загрузки «Управления дисками» прокрутите вниз, чтобы увидеть, отображается ли ваш диск в списке. Если это так, убедитесь, что он находится в сети и отформатирован. Если он не в сети, щелкните правой кнопкой мыши имя диска (например, «Диск 2») и выберите «В сети».

Если диск не был отформатирован (под черной полосой будет написано "Нераспределено"), щелкните его правой кнопкой мыши и выберите "Новый простой том". Это также решит проблему, если диск отформатирован для другой операционной системы, как описано выше. Имейте в виду, что форматирование удалит все данные на диске, поэтому продолжайте только в том случае, если вы уверены, что вам ничего с него не нужно.

Наконец, если ваш диск подключен к сети и отформатирован, но рядом с его именем не отображается буква диска, щелкните правой кнопкой мыши том и выберите «Изменить букву диска и пути», чтобы добавить букву диска. Если вам повезет, один из этих простых шагов поможет вам запустить новый диск.

Очистите диск и начните с нуля

В некоторых особых случаях диск появится в разделе «Управление дисками», но простое форматирование диска не сработает. Например, это чрезвычайно распространено с SD-картами, отформатированными с помощью дистрибутивов Linux для Raspberry Pi.

Чтобы восстановить полную емкость вашего диска, вам нужно будет запустить команду Windows "clean", которая вернет диск в полностью неформатированное состояние. Опять же, это сотрет все данные на нем, поэтому продолжайте, только если у вас нет других вариантов, и убедитесь, что вы очищаете правильный диск, иначе вы можете потерять много данных.

Откройте меню "Пуск", введите "diskpart" и нажмите Enter, чтобы открыть команду запуска. Когда появится приглашение, введите «список дисков» и нажмите Enter, чтобы увидеть диски, подключенные к вашей системе. Если вы видите, что диск, о котором идет речь, — обратите внимание на его размер — запишите его имя. В этом примере мы будем использовать «Диск 2».

Введите «выберите диск 2» и нажмите Enter, чтобы выбрать диск, который вы хотите очистить. Наконец, введите «clean» и нажмите Enter. Это сотрет диск, после чего вы сможете выполнить описанные выше шаги, чтобы отформатировать его из консоли управления дисками.

Удалить и протестировать пустой диск

Если ни один из вышеперечисленных вариантов не работает, следует извлечь накопитель из внешнего корпуса и протестировать его самостоятельно. Компоненты, которые преобразуют этот диск SATA в USB, могут выйти из строя, а это означает, что диск может быть в порядке, если вы подключите его каким-либо другим способом.

Если у вас есть настольный ПК и технологические ноу-хау, вы можете открыть его и подключить диск непосредственно к материнской плате. Если нет, купите новую внешнюю док-станцию ​​или корпус с адаптером SATA-USB, подключите к нему пустой диск, а затем подключите его к компьютеру через USB.

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

Наши любимые внешние жесткие диски

Если ваш диск не подлежит ремонту, возможно, пришло время купить новый. Ознакомьтесь с обзором лучших жестких дисков, беспроводных и защищенных дисков от PCMag.У нас также есть обзоры лучших дисков для Mac.

информационный бюллетень с советами экспертов по максимально эффективному использованию вашей технологии.","first_published_at":"2021-09-30T21:23:24.000000Z","published_at":"2021-09-30T21:23:24.000000Z ","last_published_at":"2021-09-30T21:23:13.000000Z","created_at":null,"updated_at":"2021-09-30T21:23:24.000000Z">)" x-show="showEmailSignUp ()">

Нравится то, что вы читаете?

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

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

Вот несколько полезных советов по очистке веб-страниц с помощью Python.

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

Пожалуйста, помните о важности парсинга с уважением.

Что такое парсинг веб-страниц?

Проще говоря, веб-скрапинг — это извлечение данных с веб-сайтов. Это может быть как ручной процесс, так и автоматизированный. Однако извлечение данных вручную с веб-страниц может быть утомительным и избыточным процессом, который оправдывает целую экосистему из множества инструментов и библиотек, созданных для автоматизации процесса извлечения данных. При автоматическом просмотре веб-страниц вместо того, чтобы позволить браузеру отображать страницы для нас, мы используем самописные сценарии для анализа необработанного ответа с сервера. С этого момента и далее в этом посте мы будем просто использовать термин "веб-скрейпинг" для обозначения "автоматического веб-скрейпинга".

Как выполняется парсинг веб-страниц?

Прежде чем мы перейдем к вещам, которые могут затруднить парсинг, давайте разобьем процесс парсинга веб-страниц на общие этапы:

Первый шаг включает в себя использование встроенных инструментов браузера (таких как Chrome DevTools и Firefox Developer Tools) для поиска необходимой информации на веб-странице и определения структур/шаблонов для ее программного извлечения.

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

Например, предположим, что мы хотим извлечь количество подписчиков PewDiePie и сравнить его с T-серией. Простой поиск в Google приводит меня на страницу подсчета подписчиков YouTube в режиме реального времени на Socialblade.

При визуальном осмотре мы обнаруживаем, что количество подписчиков находится внутри

тег с идентификатором rawCount .

Давайте напишем простую функцию Python, чтобы получить это значение. Мы будем использовать BeautifulSoup для анализа HTML.

А теперь посмотрим на подсчет:

Похоже на простой процесс, не так ли? Что может пойти не так?

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

Давайте перечислим эти сложности одну за другой и рассмотрим их решения в следующем разделе.

Сложности парсинга веб-страниц

Асинхронная загрузка и рендеринг на стороне клиента

То, что вы видите, не то, что вы получаете.

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

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

Вот несколько примеров:

  • Веб-страницы с бесконечной прокруткой (Twitter, Facebook и т. д.)
  • Веб-страницы с предзагрузчиками, такими как процентные полосы или счетчики загрузки.

Аутентификация

На многих веб-сайтах предусмотрена какая-либо аутентификация, о которой нам придется позаботиться в нашей программе парсинга. Для более простых веб-сайтов аутентификация может быть такой же простой, как отправка POST-запроса с именем пользователя и паролем или сохранение файла cookie. Однако могут быть и определенные тонкости, такие как:

  • Скрытые значения: наряду с именем пользователя и паролем вам может потребоваться добавить другие поля в полезные данные POST (обычно это CSRF_TOKEN, но могут быть и некоторые странные данные).
  • Настройка заголовков: могут быть определенные заголовки, которые нам необходимо установить (реферер, авторизация и т. д.)

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

Внесение в черный список на стороне сервера

Как мы упоминали ранее, ответ на вопрос "Что может пойти не так при парсинге?" также зависит от намерений владельцев веб-сайтов.

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

Простые идеи для такого анализа включают:

Анализ частоты запросов

Если сервер получает слишком много запросов от клиента за определенный период времени, это сигнал о том, что на другом конце находится человек. Еще хуже получать параллельные запросы с одного IP-адреса.

Еще один тревожный сигнал — повторение (клиент отправляет X запросов каждые Y секунд). Серверы могут измерять такие показатели и определять пороговые значения, при превышении которых они могут занести клиента в черный список. Механизмы могут быть гораздо более сложными, но вы поняли идею. Блокировка клиента обычно носит временный характер (в пользу бесплатного и открытого интернета для всех), но в некоторых случаях может быть даже навсегда.

Проверка заголовка

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

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

Приманки

Владельцы сайта могут устанавливать ловушки в виде ссылок в HTML, невидимых для пользователя в браузере. Самый простой способ сделать это — настроить CSS как display: none. запрос к этим ссылкам сервер может узнать, что это автоматизированная программа, а не человек, просматривающий сайт, в конечном итоге он заблокирует парсер.

Обнаружение шаблона

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

Коды состояния ответа, которые могут указывать на занесение в черный список на стороне сервера, включают:

Перенаправления и проверки

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

Такие компании, как Cloudflare, предоставляющие услуги по защите от ботов или DDoS-атак, еще больше усложняют доступ ботов к фактическому контенту.

Структурные сложности

Сложная навигация

Иногда бывает сложно просмотреть все веб-страницы и собрать информацию. Например, разбивку на страницы может быть сложно обойти, если каждая страница в разбиении на страницы не имеет уникального URL-адреса или если он существует, но нет шаблона, по которому можно было бы вычислить эти URL-адреса.

Неструктурированный HTML

Это происходит, когда сервер отправляет HTML, но не всегда предоставляет шаблон. Например, классы и атрибуты CSS динамически генерируются на стороне сервера и каждый раз уникальны. Иногда неструктурированный HTML также является следствием плохого программирования.

теги iframe

Иногда контент, который мы видим на веб-сайте, представляет собой тег iframe, полученный из другого внешнего источника.

Хорошо! Мы перечислили сложности; теперь пришло время обратиться к ним с обходными путями.

Нужна помощь в очистке данных с помощью Python? Получите помощь от опытных разработчиков Python →

Решение сложностей парсинга веб-страниц с помощью Python

Выбор правильных инструментов, библиотек и фреймворков

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

Для более крупных парсинг-проектов (где мне приходится собирать и обрабатывать много данных и решать проблемы, не связанные с JS), Scrapy оказался весьма полезным.

Для сайтов с большим количеством JavaScript (или сайтов, которые кажутся слишком сложными) обычно подходит Selenium. Хотя парсинг с помощью Selenium не так эффективен, как Scrapy или Beautiful Soup, он почти всегда дает вам нужные данные (в большинстве случаев это единственное, что имеет значение).

Обработка аутентификации

Мы также можем проверить, какие заголовки отправляются на сервер, с помощью инструментов браузера, чтобы воспроизвести это поведение и в коде, например, зависит ли аутентификация от таких заголовков, как Authorization и Authentication).Если на сайте используется простая аутентификация на основе файлов cookie (что маловероятно в наши дни), мы также можем скопировать содержимое файлов cookie и добавить его в код вашего парсера (опять же, для этого мы можем использовать встроенные инструменты браузера).

Обработка асинхронной загрузки

Обнаружение асинхронной загрузки

Мы можем обнаружить асинхронную загрузку на самом этапе визуальной проверки, просмотрев источник страницы (параметр "Просмотреть источник" в браузере при щелчке правой кнопкой мыши) и затем выполнив поиск искомого контента. Если вы не нашли текст в источнике, но все же видите его в браузере, то, вероятно, он обрабатывается с помощью JavaScript. Дальнейшую проверку можно выполнить с помощью сетевого инструмента браузера, чтобы проверить, не отправляет ли сайт какие-либо запросы XHR.

Обойти асинхронную загрузку

Использование веб-драйвера

Излишне говорить, что, поскольку веб-драйверы представляют собой симуляцию браузеров, они потребляют много ресурсов и сравнительно медленнее по сравнению с такими библиотеками, как BeautifulSoup и Scrapy .

Selenium поддерживает несколько языков для сценариев, включая Python. Обычно он запускает экземпляр браузера, и мы можем видеть такие вещи, как щелчок и ввод данных на экране, что полезно при тестировании. Но если нас интересует просто парсинг, мы можем использовать «безголовые браузеры», которые не имеют пользовательского интерфейса и работают быстрее с точки зрения производительности.

Chrome Headless — это популярный выбор безголового веб-драйвера. Другие варианты включают Headless Firefox, PhantomJS, spynner и HtmlUnit. Для некоторых из них может потребоваться установка xvfb и его оболочки Python (xvfbwrapper или pyvirtualdisplay) для имитации отображения экрана в виртуальной памяти без фактического вывода на экран.

Проверка вызовов AJAX

Этот метод основан на идее "Если что-то отображается в браузере, оно должно откуда-то появиться". Мы можем использовать инструменты разработчика браузера для проверки вызовов AJAX и попытаться выяснить, что запросы отвечают за выборку данных, которые мы ищем. Возможно, нам потребуется установить заголовок X-Requested-With для имитации запросов AJAX в вашем скрипте.

Решение проблемы бесконечной прокрутки

Мы можем справиться с бесконечной прокруткой, внедрив некоторую логику javascript в селен (см. эту ветку SO). Кроме того, обычно бесконечная прокрутка состоит из дополнительных вызовов AJAX к серверу, которые мы можем проверить с помощью инструментов браузера и воспроизвести в нашей программе очистки.

Как найти правильные селекторы

После того как мы нашли элемент, который хотим извлечь визуально, следующим шагом для нас будет найти шаблон селектора для всех таких элементов, который мы можем использовать для их извлечения из HTML. Мы можем фильтровать элементы на основе их классов и атрибутов CSS, используя селекторы CSS. Вы можете обратиться к этой краткой памятке, чтобы узнать о различных возможных способах выбора элементов на основе CSS.

Селекторы CSS – это наиболее распространенный выбор для парсинга. Однако в некоторых сценариях может быть полезен другой метод выбора элементов, называемый XPath (язык запросов для выбора узлов в XML-документах). Он предоставляет более универсальные возможности, например:

  • Выбор элементов на основе их содержания. Это не рекомендуется, но удобно для плохо структурированных страниц.
  • Поиск в любом направлении. Мы можем создавать запросы, которые ищут бабушек и дедушек, а затем ищут их потомков с определенными атрибутами/текстом. Это невозможно с помощью селекторов CSS.

Некоторые люди утверждают, что XPath медленнее, чем селекторы CSS, но, по моему личному опыту, оба работают одинаково хорошо. Хотя иногда один быстрее другого, разница составляет миллисекунды. Кроме того, при очистке не очень сложных и хорошо структурированных веб-страниц я просто использую инструмент выбора Chrome/Firefox, чтобы получить XPath целевого элемента, подключить его к моему скрипту, и я готов к работе в течение нескольких секунд. Сказав это, есть несколько проверок, которые могут пригодиться при разработке селекторов:

  • Согласованность в разных браузерах. Различные браузеры имеют различную реализацию механизмов для оценки селекторов CSS и XPath. Таким образом, в очень немногих случаях используемые вами селекторы могут работать для определенных браузеров/версий, а не для других. К счастью, в настоящее время большинство браузеров поддерживают оценку этих запросов в самих инструментах браузера, поэтому мы можем быстро проверить.

Нажав Ctrl + F в инспекторе DOM, мы можем использовать выражение CSS (или XPath) в качестве поискового запроса. Браузер прокрутит и позволит нам увидеть все совпадения. Это быстрый способ проверить, работает ли выражение.

  • Выбирать элементы по идентификаторам быстрее, поэтому мы должны отдавать предпочтение идентификаторам везде, где они доступны.
  • XPpaths более тесно связаны со структурой HTML, чем селекторы CSS, т. е. XPath с большей вероятностью сломается, если в структуру HTML на странице будут внесены изменения.

Борьба с черным списком на стороне сервера

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

Подмена агента пользователя и ротация. Идея состоит в том, чтобы передать другое поле заголовка пользовательского агента (или несколько разных пользовательских агентов по очереди), чтобы обмануть сервер. Список различных возможных пользовательских агентов доступен здесь. Подмена пользовательского агента может не всегда работать, потому что веб-сайты могут придумывать JS-методы на стороне клиента, чтобы определить, является ли агент тем, на что он претендует. Мы также должны иметь в виду, что смена пользовательских агентов без смены IP-адреса в тандеме может послужить сигналом опасности для сервера.

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

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

Обработка переадресаций и проверок

Очень простые текстовые капчи можно решить с помощью OCR (для этого есть библиотека python под названием pytesseract). С появлением передовых методов оптического распознавания символов (таких, как этот, основанных на глубоком обучении) текстовые капчи представляют собой скользкую дорожку, поэтому создавать изображения, способные превзойти машины, но не людей, становится все труднее.

Кроме того, на случай, если мы не хотим нести накладные расходы по разгадыванию капчи, существует несколько доступных сервисов, которые предоставляют API для одного и того же, включая Death by Captcha, Antigate и Anti Captcha. В некоторых из этих сервисов работают настоящие люди, которым платят за разгадывание капчи за вас. Тем не менее, вы можете в некоторой степени избежать проверки по слову, используя прокси и ротацию IP-адресов.

Обработка тегов iframe и неструктурированных ответов

Другие полезные инструменты и библиотеки для парсинга

В некоторых конкретных случаях вам могут пригодиться следующие инструменты.

Скрапинг с уважением

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

Как упоминалось в начале, парсинг похож на игру в кошки-мышки, работающую в серой правовой зоне, и может вызвать проблемы для обеих сторон, если не будет проводиться с уважением. Нарушение авторских прав и злоупотребление информацией может повлечь правовые последствия. Пара случаев, вызвавших споры, — публикация данных OK Cupid исследователями и лабораториями HIQ с использованием данных Linkedin для HR-продуктов.

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

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

Не пропустили ли мы какие-нибудь советы по очистке веб-страниц для разработчиков Python? Если это так, сообщите нам об этом в разделе комментариев ниже!

Изучайте Python, создавая бесплатные проекты! Просмотрите реальные проекты прямо сейчас →

Когда американцы пойдут на выборы, устроят ли хакеры хаос?

Несколько недель назад ученый-компьютерщик Дж. Алекс Халдерман установил электронную машину для голосования на сцену Массачусетского технологического института и продемонстрировал, насколько просто взломать результаты выборов.

В имитационном состязании между Джорджем Вашингтоном и Бенедиктом Арнольдом за Вашингтон проголосовали по три добровольца. Но Хальдерман, чьи исследования связаны с тестированием безопасности избирательных систем, вмешался в программирование бюллетеней, заразив карту памяти машины вредоносным программным обеспечением. Когда он распечатал результаты, квитанция показала, что Арнольд выиграл со счетом 2:1. Без бумажного следа каждого голоса ни избиратели, ни человек-аудитор не могли проверить наличие расхождений. На реальных выборах около 20 % избирателей по всей стране по-прежнему голосуют только электронными голосами.

По мере приближения промежуточных выборов в США Халдерман, среди прочего, предупредил, что наши «устаревшие и недостаточно протестированные» электронные системы голосования становятся все более уязвимыми для атак. Они также могут привести к путанице. Некоторые первые избиратели в Техасе уже сообщили, что голоса, которые они отдали за кандидата в Сенат США от Демократической партии Бето О’Рурка, были заменены на экране действующим сенатором-республиканцем Тедом Крузом. Нет никаких доказательств взлома, и известно, что на конкретных компьютерах есть программные ошибки, которые могут быть причиной ошибок.

Халдерман не считает, что в этом виновата атака.«Если бы это было так, смена кандидата не была бы видна ни избирателю, ни должностным лицам избирательной комиссии», — говорит он. "Но то, что происходит в Техасе, является еще одним предупреждением о том, что стареющие машины не работают должным образом, что делает их благодатной почвой для атак с целью кражи голосов".

В конечном счете, независимо от того, вызваны ли сценарии, подобные сценарию в Техасе, сбоем программного обеспечения, неисправным оборудованием или злоумышленником, одним из результатов является потеря доверия к нашему избирательному процессу. И, как недавно написал журналист по кибербезопасности Ким Зеттер в журнале The New York Times Magazine, « не слишком грандиозно сказать, что если есть провал в избирательной урне, то и демократия терпит неудачу. ”

Халдерман, руководитель Центра вычислительной техники и общества Мичиганского университета, недавно рассказал Scientific American о различных типах технологических угроз демократии и о том, как старая добрая бумага может защитить выборы.


Электронная машина для голосования. Фото: Элайджа Нувлаж Getty Images

[Ниже следует отредактированная стенограмма интервью:]

Похоже, что вмешательство в выборы происходит вокруг нас по-разному. Как взлом программного обеспечения машины для голосования связан с кампаниями по дезинформации, которые появляются в наших лентах Facebook?

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

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

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

Как вы пришли к исследованию безопасности голосования?

Он буквально упал мне на колени, когда я учился в аспирантуре Принстона в 2006 году. Ни одна исследовательская группа никогда не имела доступа к машине для голосования в США, чтобы провести анализ безопасности, и анонимная группа предложила нам такую. учиться. Тогда был настоящий спор между исследователями, которые предполагали наличие уязвимостей в оборудовании избирательных участков, и производителями, утверждавшими, что все в порядке.

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

Он отказался от высокомерия. Теперь, когда были проведены крупные академические исследования, ученые пришли к единому мнению, что здесь будут уязвимости в оборудовании избирательных участков.

Иногда риски или возможные режимы отказа новой технологии полностью предсказуемы. И это, безусловно, имело место в голосовании. Когда появились безбумажные компьютерные машины для голосования, многие ученые-компьютерщики, еще до того, как кто-либо изучил непосредственно одну из этих машин, говорили: «Это просто не очень хорошая идея, чтобы выборы проводились, по сути, черным ящиком». технологии».

С другой стороны, способы использования этих сбоев и последствия этого использования иногда предсказать сложнее. Когда мы провели первое исследование машин для голосования 10 лет назад, мы говорили о различных возможных злоумышленниках, нечестных чиновниках на выборах и коррумпированных кандидатах. Но идея о том, что это будет кибератака иностранного правительства, что это будет одной из самых больших проблем, о которых следует беспокоиться, — ну, это было довольно далеко в списке. За последние 10 лет кибервойна превратилась из чего-то, что казалось научной фантастикой, в то, о чем вы почти каждый день читаете в газетах.

2016 действительно все изменил. Это научило нас тому, что наши модели угроз неверны. Я думаю, что это застало врасплох большую часть разведывательного сообщества, и это застало врасплох большую часть сообщества кибербезопасности. Было нереально видеть, как Россия так близко подошла к тому, чтобы реально использовать уязвимости, чтобы навредить нам.

Министерство внутренней безопасности и разведывательное сообщество заявляют, что нет доказательств того, что российские хакеры изменили результаты голосования на президентских выборах 2016 года. Можете ли вы поставить «нет доказательств» в контексте?

Мы точно знаем, что в 2016 году русские не сделали всего, на что они способны.Большая часть доказательств — как российского нападения, так и российского сдерживания — относится к системам регистрации избирателей, которые являются еще одной серверной системой, управляемой каждым государством.

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

После 2016 года сами машины для голосования подвергались гораздо, гораздо, гораздо меньшему контролю со стороны разведки и защиты — во всяком случае, насколько нам известно в публичной сфере. Насколько мне известно, ни один штат не проводил тщательной экспертизы своих машин для голосования, чтобы выяснить, не были ли они скомпрометированы.

Значит, есть еще что-то, на что не обращают должного внимания?

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

Однако когда дело доходит до самих машин для голосования, как может быть внедрен вредоносный код?

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

Существует процесс программирования, в ходе которого дизайн бюллетеня — расы и кандидаты, а также правила подсчета голосов — создается, а затем копируется на каждую отдельную машину для голосования. Избирательные чиновники обычно копируют его на карты памяти или USB-накопители для избирательных машин. Это обеспечивает маршрут, по которому вредоносный код может распространяться из централизованной системы программирования на множество машин для голосования в полевых условиях. Затем код атаки запускается на отдельных машинах для голосования, и это просто еще одна часть программного обеспечения. Он имеет доступ ко всем тем же данным, что и машина для голосования, включая все электронные записи голосов людей.

Так как же проникнуть в компанию или государственное учреждение, которые программируют дизайн бюллетеней? Вы можете проникнуть в их компьютеры, которые подключены к Интернету. Затем вы можете распространить вредоносный код на машины для голосования на очень большую территорию. Он создает чрезвычайно концентрированную цель для атаки.

К чему нам это приведет?

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

Что, если целью противника является не повсеместный хаос, а нечто более тонкое?

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

Я думаю о близких гонках за Сенат и Палату представителей, например, в Техасе и Джорджии.

Более широкий вопрос заключается в том, что если у нас будет напряженная национальная борьба за контроль над Конгрессом, она будет зависеть от ряда колеблющихся округов. Поскольку наша избирательная система настолько распределена, что населенные пункты и штаты принимают свои собственные важные решения в области безопасности, это означает, что некоторые из них будут намного слабее других. А такие изощренные противники, как Россия, могут попытаться проверить безопасность выборов во всех этих вероятных колеблющихся округах, найти те, которые наиболее слабо защищены, и тонко манипулировать результатами в этих округах. И если они смогут сделать это в достаточном количестве колеблющихся округов, они смогут изменить исход и получить контроль над Конгрессом. Вот что так страшно.

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

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

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

Но эта стратегия представляет проблему для таких штатов, как Нью-Джерси и Джорджия, где в настоящее время вообще нет бумажных следов.

Сегодня только около 79 процентов голосов по всей стране регистрируются на листе бумаги. Если у вас нет бумажного следа, то провести тщательную проверку невозможно. В лучшем случае вы просто снова нажимаете кнопку печати в компьютерной программе. Вы получите тот же результат, что и в первый раз, независимо от того, правда это или нет.

Есть около 14 конкретных штатов, в которых есть пробелы, в которых бюллетени не записываются на бумаге, и это всем известно. Грузия, например, полностью безбумажна. Кроме того, они используют машины для голосования с программным обеспечением, для которого [было установлено исправление безопасности] с 2005 года.

Что вас больше всего беспокоит на промежуточных выборах 2018 года?

Что делать что-то еще слишком поздно. За исключением, возможно, некоторых штатов, которые ужесточат свои процедуры после выборов.

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

Но для этого потребуются национальные лидеры и национальные стандарты. В противном случае мы не сможем двигаться достаточно быстро или скоординировано, и победят атакующие, которые держат нас в прицеле.

ОБ АВТОРАХ

Джен Шварц — старший редактор статей в Scientific American. Она рассказывает о том, как люди адаптируются или нет к быстро меняющемуся миру. Авторы и права: Ник Хиггинс

Читайте также: