Всем доброго дня!
Возникла необходимость создать GUI со встроенным браузером.
Но просто встроить браузер мало, его еще нужно автоматизировать (произвести авторизацию и нажать пару кнопок)…
Сначала начал смотреть в сторону Selenium, авторизацию реализовал, нажатие кнопок реализовал, но вот встроить окошко с браузером в свое GUI приложение не получилось. Спрашивал у нескольких специалистов по Selenium, все в один голос сказали это невозможно.
Вторым этапом была настройка под себя и использование webkit. Тут обнаружилась другая проблема. Если заходить на сайт (меня интересует ru.grepolis.com) обычным браузером, происходит отправка ряда GET и POST запросов. Но если заходить на этот сайт через webkit, то на определенном этапе запросы перестают отправляться, т.е. получается что сайт не догружается… Сначала думал проблема с Flash, подключил плагин, попробовал youtube.com, все нормально грузится (ролики проигрывает), а вот нужный мне сайт никак не хочет до конца загружаться… Пробовал Spynner, но так как он написан с использованием webkit, та же самая история, сайт до конца не загружается…
И наконец, самый подходящий ИМХО мне вариант использование cefpython. Вставил браузер в свое GUI окошко, загрузил страницу, все полностью отобразилось, в общем работает как нужно… Но тут возник другой вопрос: КАК АВТОМАТИЗИРОВАТЬ ЗАПОЛНЕНИЕ ПОЛЕЙ И НАЖАТЬ КНОПКИ? Какими средствами это можно реализовать? Списывался с разрабом, он посоветовал использовать JavaScript. Но как реализовать я не пойму, в Java полный 0.
Помогите кто сталкивался, как решить мою проблему?
Приведу для примера код. Он открывает Google. Как автоматизировать, например, ввод текста в строку поиска?
# An example of embedding CEF in wxPython application.
#coding:utf-8
import wx
import sys
import time
import cefpython
# TODO: currently we use wx.Timer to imitate message loop, but
# it would probably be better to use wx.CallLater() and wx.lib.pubsub.
class MainFrame(wx.Frame):
browser = None
def __init__(self):
wx.Frame.__init__(self, parent=None, id=wx.ID_ANY, title='wxPython example', size=(1000,800))
self.CreateMenu()
self.browser = cefpython.CreateBrowser(self.GetHandle(), browserSettings={}, navigateURL="http://google.com")
self.Bind(wx.EVT_SET_FOCUS, self.OnSetFocus)
self.Bind(wx.EVT_SIZE, self.OnSize)
def CreateMenu(self):
filemenu = wx.Menu()
filemenu.Append(1, "Открыть")
filemenu.Append(2, "Выход")
aboutmenu = wx.Menu()
aboutmenu.Append(1, "CEF Python")
menubar = wx.MenuBar()
menubar.Append(filemenu,"&File")
menubar.Append(aboutmenu, "&About")
self.SetMenuBar(menubar)
def OnSetFocus(self, event):
cefpython.wm_SetFocus(self.GetHandle(), 0, 0, 0)
def OnSize(self, event):
cefpython.wm_Size(self.GetHandle(), 0, 0, 0)
class MyApp(wx.App):
timer = None
timerID = 1
def OnInit(self):
cefpython.Initialize()
sys.excepthook = cefpython.ExceptHook
self.timer = wx.Timer(self, self.timerID)
self.timer.Start(10) # 10ms
wx.EVT_TIMER(self, self.timerID, self.OnTimer)
frame = MainFrame()
self.SetTopWindow(frame)
frame.Show()
return True
def OnExit(self):
self.timer.Stop()
cefpython.Shutdown()
def OnTimer(self, event):
cefpython.SingleMessageLoop()
if __name__ == '__main__':
print('wx.version=%s' % wx.version())
app = MyApp(False)
app.MainLoop()
Может быть есть какой-нибудь другой способ реализовать мою затею… Подскажите пожалуйста. Второй месяц в тупике…