Автоматизация Chrome - PullRequest
       5

Автоматизация Chrome

17 голосов
/ 19 января 2011

Я видел некоторые дикие вещи, происходящие, когда я вставлял какой-то код Javascript в URL в Firefox и Chrome. Можно ли использовать эту технику, чтобы указать Chrome посетить URL-адрес и затем сохранить его в виде файла? Я пытаюсь автоматизировать Chrome, а Selenium выглядел чрезвычайно пугающим.

РЕДАКТИРОВАТЬ : К сожалению, я забыл быть более ясным здесь. Позволь мне объяснить. Такие вещи, как wget, curl и т. Д. Не будут работать, потому что я должен пройти через логины в некоторых из этих скриптов. И я посмотрел на iMacros, но обнаружил, что я не могу заставить их работать из командной строки, кроме как в Windows, если я не заплачу за пакет за 499 долларов. Некоторые другие преимущества GCE заключаются в том, что платформа dev является бесплатной и в некоторой степени открытой, а также кроссплатформенной. (Я использую Linux.)

РЕДАКТИРОВАТЬ : На данный момент я изучаю расширения Google Chrome. Похоже, их легко построить, и я позволю (я думаю) сказать браузеру открыть новую вкладку, перейти на страницу, манипулировать DOM на этой странице (например, заполнить некоторые поля и войти в систему), а затем манипулировать ДОМ на странице ответа. GCE не позволяют вам выполнять файловый ввод / вывод, поэтому они не похожи на Firefox Extensions с XPCOM, но вы можете обойти это, используя AJAX для отправки данных в бэкэнд-скрипт (например, PHP-скрипт на сервере LAMP) для сохранения эти данные.

РЕДАКТИРОВАТЬ : Кстати, и это немного не по теме (но я добавлю, чтобы пояснить) те "дикие вещи" в Javascript, которые я упоминал, были, когда вы манипулируете DOM, создавая URL, который выглядит вот так:

javascript:(function(){...your URL-encoded Javascript here...})();

Ответы [ 5 ]

10 голосов
/ 19 января 2011

Решение состоит в том, чтобы создать собственное расширение Google Chrome (GCE) . Это легко узнать в течение 4 часов, если вы знаете, как делать немного продвинутые вещи Javascript, и это очень мощный. Я могу использовать API вкладок, чтобы создать новую вкладку и перейти к определенному URL. Затем я могу вставить jQuery в этот URL и заставить его манипулировать DOM или делать все, что мы обычно можем делать с jQuery. Я не могу выполнить файловый ввод / вывод, но есть два обходных пути. Во-первых, я могу заставить браузер загружать файл из удаленного местоположения и отправлять данные с текущей страницы обратно на удаленный сервер с помощью вызовов jQuery $ .get () или $ .post ().

10 голосов
/ 19 января 2011

Вы можете использовать Python для автоматизации веб-задач, используя pywebkitgtk .Это привязка Python для WebKitGtk, которая использует движок WebKit, тот же движок, что и Chrome.

Благодаря этому сообщению в блоге pywebkitgtk - Выполнить JavaScript из Python , я создал подклассwebkit.WebView чтобы упростить эти задачи.

import gtk
import webkit
import json

class WebView(webkit.WebView):
    def eval_script(self, script):
        self.execute_script('oldtitle=document.title;document.title="!!!!";document.title=JSON.stringify(eval(' + json.dumps(script) + '));')
        result = json.loads(self.get_main_frame().get_title())
        self.execute_script('document.title=oldtitle;')
        return result
    def wait_for_load(self):
        handle = None
        def load_status_cb(view, frame):
            if frame == view.get_main_frame():
                self.disconnect(handle)
                gtk.main_quit()
        handle = self.connect('load-finished', load_status_cb)
        gtk.main()

Я добавил функцию с именем eval_script, которая похожа на execute_script, но вы можете получить результаты функции в виде объектов Python.Вам просто нужно убедиться, что то, что вы оцениваете, является JSON-сериализуемым.

Кроме того, я добавил функцию wait_for_load, которая довольно понятна.

Чтобы настроить пользовательский интерфейс,Сначала вы должны создать окно, прокручиваемое окно и веб-представление.

# window
window = gtk.Window()
window.set_default_size(800, 600)

# scroll view
scroll_view = gtk.ScrolledWindow()
scroll_view.props.hscrollbar_policy = gtk.POLICY_AUTOMATIC
scroll_view.props.vscrollbar_policy = gtk.POLICY_AUTOMATIC

# web view
web_view = WebView()

# events
window.connect('delete-event', lambda window, event: gtk.main_quit())

# show
scroll_view.add(web_view)
window.add(scroll_view)
window.show_all()

Затем вы можете начать автоматизировать вещи!Например, этот код загружает страницу входа в StackOverflow, нажимает кнопку входа в Facebook, вводит имя пользователя и пароль (в данном случае «тест»).Наконец, он показывает текст кнопки входа в систему.

# the script is here
web_view.open('http://www.stackoverflow.com/users/login')
web_view.wait_for_load()

web_view.execute_script('openid.signin("facebook")')
web_view.wait_for_load()

web_view.execute_script('document.querySelector("#email").value = "test"')
web_view.execute_script('document.querySelector("#pass").value = "test"')

print "Login's button text is:", web_view.eval_script('document.querySelector("#buttons input[type=\\"submit\\"]").value')

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

Кнопка входа в системутекст: เข้า สู่ ระบบ

Вы также можете сделать так, чтобы он действительно нажал кнопку отправки, просто вызвав click() для этого элемента. (Примечание: click() работает для элементов кнопки, а не для ссылок)

web_view.execute_script('document.querySelector("#buttons input[type=\\"submit\\"]").click()')
web_view.wait_for_load()

Вы заметите, что после завершения всех сценариев приложение закрывается без ожидания.

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

gtk.main()

Также, если вы удалите строку window.show_all() ипоследняя gtk.main() строка.Тогда ваше приложение будет работать без графического интерфейса. (Примечание: вам все еще нужен сервер отображения.)

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

0 голосов
/ 10 июня 2014

Вы можете оформить заказ http://qaagent.com. Это простой способ автоматизировать некоторые веб-задачи

0 голосов
/ 20 января 2011

Определенно проверьте Watir !Я нахожу это чрезвычайно простым.С Selenium он работает так же легко, как и с Chrome, IE или Firefox.Хотя версия для Chrome еще официально не поддерживается, они утверждают, что ее можно использовать.Я сам использовал его только для Selenium, IE и Firefox.

Кроме того, Watir легко интегрируется с Cucumber , если вы ищете передовые BDD (разработка на основе поведения).Это просто код Ruby, с открытым исходным кодом и размещенный на gitHub .Наслаждайтесь!

0 голосов
/ 19 января 2011

Вы можете попробовать iMacros для Chrome .Это довольно простая в использовании система автоматизации.

  1. Откройте iMacros
  2. Нажмите Запись .
  3. Перейдите к процедуре просмотра.
  4. Нажмите Стоп.

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

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