Соскреб в Интернете с QWebView и QWebElement возвращает увеличивающиеся кратные

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

void cardDB::updateDB()
{
this->view = new QWebView;
QString urlString("http://gatherer.wizards.com/Pages/Card/Details.aspx?  multiverseid=");

for(int i = 1; i <= 4; i++)
{

// Load the page
view->load(QUrl(urlString+QString::number(i)));
QObject::connect(view, SIGNAL(loadFinished(bool)), this, SLOT(saveFile()));

// Wait for saveFile() to finish
QEventLoop loop;
QObject::connect(this, SIGNAL(done()), &loop, SLOT(quit()));

loop.exec();
}
}

void cardDB::saveFile()
{
QString fileName("test");
// Grab the name tag
QWebElement e = view->page()->mainFrame()->findFirstElement("div#ctl00_ctl00_ctl00_MainContent_SubContent_SubContent_nameRow");
QString pageString = e.toPlainText();
pageString.remove(0, 11);

QFile localFile(fileName +".txt");
if (!localFile.open(QIODevice::Append))
{
// Still need to implement error catching
}
else
{
localFile.write(pageString.toUtf8());
localFile.close();
}

emit done();
}

мои результаты получаются так:

Ankh of Mishra
Basalt Monolith
Basalt Monolith
Black Lotus
Black Lotus
Black Lotus
Black Vise
Black Vise
Black Vise
Black Vise

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

0

Решение

Следующая строка кода, добавленная в конце цикла for, исправила мою проблему:

QObject::disconnect(view, SIGNAL(loadFinished(bool)), this, SLOT(saveFile()));

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

2

Другие решения


По вопросам рекламы [email protected]