Russian Qt Forum
Ноябрь 26, 2024, 05:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с контентом QWebView  (Прочитано 10922 раз)
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« : Декабрь 05, 2012, 07:42 »

Добрый день.
Подскажите пожалуйста, возможно ли, загрузив html-страницу с формами в класс браузера (QWebView), вставить в определенное поле определенное значение (например, взяв его из буфера обмена) и имитировать нажатие кнопки Submit? Если да, то как это сделать средствами Qt?
Записан

Эвтаназия - наше хобби!
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #1 : Декабрь 05, 2012, 08:35 »

https://github.com/makinacorpus/spynner/blob/master/src/spynner/browser.py
Записан
Bepec
Гость
« Ответ #2 : Декабрь 05, 2012, 08:41 »

На питон шлёте сразу? Хотя мб и к лучшему )
Записан
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #3 : Декабрь 05, 2012, 08:55 »

alex312, Bepec

Я не знаю питон, знаю C++ и немного знаю Qt. Есть готовая программа. Но, работая с ней, придется, помимо прочего, примерно 200 раз в день переключаться в браузер и вводить данные в форму. Хотелось бы этот процесс автоматизировать - включить в программу QWebView, и, авторизовавшись на сайте один раз, отправлять результаты в полуавтоматическом режиме. Чем учить новый язык, проще было бы разобрать процесс авторизации, и отправлять те же данные POST-ом через QNetworkAccessManager или CURL. Тем не менее, есть предположение, что можно вписать данные в переменные, которые где-то хранятся. Наверняка текущее содержимое формы где-то хранится, и к этому содержимому можно получить доступ?

PS Решил проблему, все замечательнейшим образом заработало.
У кого возникнут схожие вопросы, прочтите мануал класса QWebElement.
« Последнее редактирование: Декабрь 05, 2012, 11:49 от PinkPanther » Записан

Эвтаназия - наше хобби!
sascha3115
Гость
« Ответ #4 : Апрель 25, 2013, 21:12 »

Код:
хорошо. Пытаюсь написать простой браузер но не пойму что за ошибка. Помогите пожалуйста 
Код mainwindow.h:
[code#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
   
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
   
private slots:
    void on_lineEdit_returnPressed();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H]
Код mainwindow.cpp:
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtWebKit/QtWebKit>
#include <QtWebKitWidgets/qwebview.h>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_lineEdit_returnPressed()
{
    QString url_str = this->ui->lineEdit->text();
    if (!url_str.startsWith("http://"))
    {
    url_str = "http://"+url_str;
    }
    QUrl url(url_str);
    this->ui->webView->load(url);

}
Записан
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #5 : Апрель 26, 2013, 11:18 »

Возникла та же проблема.
После переезда на 5.0.2 этот кусок кода перестал работать:

Код:
ui->webView->load(QUrl(addr));
ui->webView->page()->setContentEditable(true);
QWebElement link = ui->webView->page()->mainFrame()->findFirstElement("input[name=urls]"); // ошибка тут
link.setAttribute("value", urls);
QWebElement button = ui->webView->page()->mainFrame()->findFirstElement("input[type=submit]"); // и тут
if (button.isNull())
    QMessageBox::critical(this, "Error!", "Can't find button around here.");
else
    button.evaluateJavaScript("this.click()");

На инициализации link и button компилятор выдает ошибку "C:\Users\PinkPanther\Documents\QtProjects\CorpDataCollector\mainwindow.cpp:77: ошибка: invalid use of incomplete type 'class QWebFrame'", хотя чисто визуально все на месте, и все методы присутствуют в описании классов 5.0.2. А мне по-прежнему необходимо получать доступ к полю ввода (в данном случае это textarea), и, после вставки текста, нажимать на кнопку submit. Как это сделать в версии 5.0.2? Пример, который дается в QWebElement, работать не захотел.
Записан

Эвтаназия - наше хобби!
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #6 : Апрель 26, 2013, 12:29 »

Не подключен нужный хедер
Записан
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #7 : Апрель 26, 2013, 13:36 »

Не подключен нужный хедер

Спасибо. Возможно. Но мой код не менялся. В mainwindow.h остается подключенным QWebKit (#include <QWebKit>), в проекте (.pro) подключена библиотека webkit. И в 4.8.х все работало. Либо баг, либо в 5.0 что-то поменяли.
Записан

Эвтаназия - наше хобби!
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #8 : Апрель 26, 2013, 13:51 »

ошибка: invalid use of incomplete type 'class QWebFrame'
Не подключен нужный хедер
... либо в 5.0 что-то поменяли.
Может так будет понятнее  Злой Злой Злой
Записан
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #9 : Апрель 26, 2013, 16:22 »

ошибка: invalid use of incomplete type 'class QWebFrame'
Не подключен нужный хедер
... либо в 5.0 что-то поменяли.
Может так будет понятнее  Злой Злой Злой

Нет, пока понятнее не стало.
В мануале сказано, что хеадер QWebFrame прописывается так: #include <QWebFrame>. До сегодняшнего дня я просто указывал общий хеадер QWebKit, и этого хватало.
Когда я добавляю QWebFrame отдельно, при запуске вылезает ошибка, "QWebFrame: No such file or directory"
Лезу на диск и вижу, что такого хеадера в папке QWebKit действительно нет.
Хеадер QWebFrame есть в папке QWebKitWidgets, но подключать хеадер из этой папки компилятор тоже не дает - выкидывает ту же ошибку.

Более того, когда я выкинул весь код работы с браузером, проект все равно не стал компилироваться. Наличие пустого QWebView в ui (вставлен в редакторе форм) вызывает две или три ошибки компиляции.
Записан

Эвтаназия - наше хобби!
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #10 : Апрель 26, 2013, 16:43 »

Когда я добавляю QWebFrame отдельно, при запуске вылезает ошибка, "QWebFrame: No such file or directory"
Лезу на диск и вижу, что такого хеадера в папке QWebKit действительно нет.
Хеадер QWebFrame есть в папке QWebKitWidgets, но подключать хеадер из этой папки компилятор тоже не дает - выкидывает ту же ошибку.
Ну раз уж вы так далеко залезли, то залезьте еще и в примеры от Qt5, например fancybrowser, и узрите строку подключения модулей
Код:
QT      +=  webkitwidgets network widgets
, особое внимание на модуль webkitwidgets
Записан
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #11 : Апрель 26, 2013, 17:23 »

Код:
QT      +=  webkitwidgets network widgets
, особое внимание на модуль webkitwidgets

Спасибо!
Записан

Эвтаназия - наше хобби!
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.245 секунд. Запросов: 23.