Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 22, 2012 09:00:44

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

Ребята, очень нужна Ваша помощь! Третью неделю не могу победить, нигде нет ответа на мой вопрос…

Вот например код

#!/usr/bin/env python 
# -*- coding: utf-8 -*-
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
app = QApplication(sys.argv)
web = QWebView()
web.load(QUrl("http://yandex.ru"))
web.show()
sys.exit(app.exec_())
Создаю окошко в PyQT, которое открывает страницу Яндекса

Но мне нужно еще произвести нектороые действия, например набрать в строке поиска "http/программисту.рф/" и нажать кнопку поиска…

Вот как это выглядит при помощи Silenium
#!/usr/bin/env python 
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
 
browser = webdriver.Firefox() # Get local session of firefox
browser.get("http://www.yandex.ru") # Load page
assert "Яндекс".decode("utf-8") in browser.title
elem = browser.find_element_by_name("text") # Find the query box
elem.send_keys("http://программисту.рф/".decode("utf-8") + Keys.RETURN)
time.sleep(0.2) # Let the page load, will be added to the API

Как мне сделать так, чтобы в окошке PyQT происходило то, что выполняется в Selenium?
Пробовал Spynner, Ghost, но также не пойму как это встроить в PyQT… Это вообще возможно? Или я зря трачу время?



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#2 Окт. 22, 2012 17:33:02

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

В Spynner все это есть, например sendText. Остальное тоже можно в исходниках подсмотреть.

А почему Spynner не подошел? Его же тоже видимым можно сделать.

#!/usr/bin/python
import spynner
import time
 
browser = spynner.Browser(debug_level=spynner.INFO)
browser.create_webview()
browser.show()
browser.load("http://www.yandex.ru")
browser.load_jquery(True)
browser.sendText("input[name=text]", "Python")
browser.click("input[type=submit]", wait_load=True)
time.sleep(10.0)

Офлайн

#3 Окт. 22, 2012 20:19:32

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

Я бы с удовольствием использовал Spynner, но проблема в том, что мне нужно не просто отобразить загрузку страницы и например ввод текста в строку поиска (или например авторизация), а после этого еще использовать браузер… Т.е. уже вручную кликать ссылки и т.д.

Пытался написать о своей проблеме разработчику Spynner, но я не достаточно владею Английским, т.е. я так и не смог объяснить ему что именно мне нужно…




—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#4 Окт. 22, 2012 21:47:26

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

Seganapa
Я бы с удовольствием использовал Spynner, но проблема в том, что мне нужно не просто отобразить загрузку страницы и например ввод текста в строку поиска (или например авторизация), а после этого еще использовать браузер… Т.е. уже вручную кликать ссылки и т.д.

Пытался написать о своей проблеме разработчику Spynner, но я не достаточно владею Английским, т.е. я так и не смог объяснить ему что именно мне нужно…
Так там это есть, почитайте исходники. Метод browse().

Попробовал, ссылки, которые открываются в новом окне, не работают. Но есть решение

Пример использования браузера после каких-то действий:
#!/usr/bin/python
import spynner
import time
from PyQt4 import QtWebKit
 
class ClickableBrowser(spynner.Browser):
    def __init__(self, *args, **kwargs):
        super(ClickableBrowser, self).__init__(*args, **kwargs)
        self.webpage.setLinkDelegationPolicy(QtWebKit.QWebPage.DelegateAllLinks)
        self.webpage.linkClicked.connect(self._link_is_clicked)
 
    def _link_is_clicked(self, url):
        self.load(url)
  
browser = ClickableBrowser(debug_level=spynner.INFO)
browser.create_webview()
browser.show()
browser.load("http://www.yandex.ru")
browser.load_jquery(True)
browser.sendText("input[name=text]", "Python")
browser.click("input[type=submit]", wait_load=True)
browser.browse() 
При встраивании в свое приложение учтите, что Spynner создает свой инстанс QApplication и нужно будет или создавать виджеты (если есть) только после браузера, или подменить spynner.SpynnerQapplication.

Отредактировано reclosedev (Окт. 22, 2012 21:51:45)

Офлайн

#5 Окт. 23, 2012 07:26:38

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

Spynner создает свой инстанс QApplication и нужно будет или создавать виджеты (если есть) только после браузера, или подменить spynner.SpynnerQapplication

Пожалуйста, можно поподробнее. Это мое первое GUI приложение на python.



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#6 Окт. 23, 2012 09:21:52

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

Seganapa
Spynner создает свой инстанс QApplication и нужно будет или создавать виджеты (если есть) только после браузера, или подменить spynner.SpynnerQapplication

Пожалуйста, можно поподробнее. Это мое первое GUI приложение на python.
Я же не знаю, что вы пишите. Будут конкретные проблемы, обращайтесь.
Может все приложение - это запуск браузера, автоматические действия, потом передача управления пользователю, тогда и думать ни о чем не надо.

Офлайн

#7 Окт. 26, 2012 09:57:44

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

А flash с помощью Spynner можно запустить, если да, то как? Ввожу логин пароль идет загрузка страницы, но до конца не доходит, видимо Flash не подгружает.

Уважаемый reclosedev, есть ли вообще какой-нибудь способ встроить полноценный браузер, например Firefox, в окошко моей программы (PyQT4)?

Нашел вот еще средство:
Но он тоже запускает и открывает браузер встроенный в windows.
Пролистал учебник по PyQT, но ответа не нашел…



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#8 Окт. 26, 2012 10:28:27

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

Seganapa
А flash с помощью Spynner можно запустить, если да, то как
http://stackoverflow.com/questions/2996758/qwebkit-and-flash-player-why-its-not-working-in-windows
Не пробовал и пока нет возможности проверить.

Seganapa
есть ли вообще какой-нибудь способ встроить полноценный браузер, например Firefox, в окошко моей программы (PyQT4)?
Сомневаюсь.

Офлайн

#9 Окт. 26, 2012 13:41:46

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

Что-то не пойму куда нужно вставить

QWebSettings.globalSettings().setAttribute(QWebSettings.PluginsEnabled, True)
в коде, чтобы включить Flash

#!/usr/bin/python
import spynner
import time
from PyQt4 import QtWebKit
 
class ClickableBrowser(spynner.Browser):
    def __init__(self, *args, **kwargs):
        super(ClickableBrowser, self).__init__(*args, **kwargs)
        self.webpage.setLinkDelegationPolicy(QtWebKit.QWebPage.DelegateAllLinks)
        self.webpage.linkClicked.connect(self._link_is_clicked)
 
    def _link_is_clicked(self, url):
        self.load(url)
  
browser = ClickableBrowser(debug_level=spynner.INFO)
browser.create_webview()
browser.show()
browser.load("http://ru.grepolis.com")
browser.load_jquery(True)
browser.browse() 



—————————————————————–
Изучаю и параллельно использую Python 2.7

Офлайн

#10 Окт. 26, 2012 16:36:31

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Эмуляция браузера PyQT4

В начало программы:

settings = QtWebKit.QWebSettings.globalSettings()
settings.setAttribute(QtWebKit.QWebSettings.PluginsEnabled, True)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version