В настоящее время я работаю над программным обеспечением, которое будет запрашивать сборщик.magic.com для создания базы данных карт. Во время тестирования моих функций я обнаружил, что получаю странные результаты. Мои функции заключаются в следующем:Веб-скребок с QWebView и QWebElement возвращает увеличивающиеся множители
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
Прежде чем я добавил цикл событий, я бы просто получить имя я карты я раз теперь, кажется, матч на основе какое число в цикле оно.
Я был пойман этим раньше - я всегда думаю, было бы неплохо, если бы был тест, чтобы проверить, было ли соединение уже сделано до того, как вы установили соединение. Может быть, есть, и я его еще не нашел. –
Говоря с моим другом, который хорошо знает Qt, он также указал, что я мог бы использовать: 'QObject :: connect (view, SIGNAL (loadFinished (bool)), это, SLOT (saveFile()), Qt: : UniqueConnection); ' Это делает то, что вы спрашивали о Майкле –