Скрипинг экрана с использованием Ghost.py

Вот простая программа, которая не работает

from ghost import Ghost

ghost = Ghost(wait_timeout=40)
page, extra_resources = ghost.open("http://samsung.com/in/consumer/mobile-phone/mobile-phone/smartphone/")
ghost.wait_page_loaded()
n=2;
links=ghost.evaluate("alist=document.getElementsByTagName('a');alist")
print links

ОШИБКА IS: raise Exception (timeout_message)

Исключение: невозможно загрузить запрошенную страницу

Есть ли какая-то проблема с программой?

Ответ 1

Похоже, что люди сообщают вам о подобных проблемах, не получая никаких объяснений (например: https://github.com/jeanphix/Ghost.py/issues/26)

Отрегулируйте линию оценки следующим образом, на которое ссылается документация ghost.py:

links = gh.evaluate("""
                        var links = document.querySelectorAll("a");
                        var listRet = [];
                        for (var i=0; i<links.length; i++){
                            listRet.push(links[i].href);
                        }
                        listRet;
                    """)

Ответ 2

Я получал эту ошибку на каждой странице, которую я пробовал, когда я впервые получил Ghost.py, так как я решил ее решить, я сломал PyQt и вместо этого установил PySide. Это все равно для меня.

Ответ 3

Мне пришлось добавить дополнительную логику в ghost.py wait_for_page_loaded func:

    reTmp = str(resource.url)
    if "PyQt4" in reTmp:
        reTmp = str(reTmp).replace("PyQt4.QtCore.QUrl(u\'", "").replace("\')","")
    if url == reTmp:
        page = resource

PyQt добавлял глупый мусор к resource.url, поэтому url == resource.url никогда не мог загрузить страницу должным образом.

Ответ 4

ghost.py требует либо привязки PySide (предпочтительно), либо PyQt Qt:

pip install pyside
pip install ghost.py --pre

попробуйте установить pyside вместо pyqt. эта работа для меня.