使用 Ghost.py python 包登录 facebook

login to facebook using the Ghost.py python package

任务是使用网络引擎登录 facebook 页面。为此,我选择了 Ghost.py。安装了 pySide、Flask 和粘贴模块,最终使用命令 'pip install Ghost.py' 获得了 Ghost.py。 我的登录脚本很简单:

from ghost import Ghost
ghost = Ghost()
session = ghost.start()
page, resources = session.open('https://www.facebook.com/login.php')

result, resources = session.set_field_value("input[id=email]", 'email')
result, resources = session.set_field_value("input[id=pass]", 'passssss')

page, resources = session.call("form", "submit", expect_loading=True)
session.capture_to('I:\beer.png')

但是当我使用 windows PC 时,我在 Facebook 页面上看到 "enable cookie in your browser" 消息。当我使用安装了 fedora 的笔记本电脑时,我成功登录了。 有什么区别以及如何解决这个问题? 我想这是我 windows PC 上的旧 webkit 版本。

此时,我可以使用以下代码在我的 Windows PC 上登录 Facebook。任何时候由于他们的升级而改变,然后改变受影响的部分。干杯。

from ghost import Ghost, Session

ghost = Ghost()
USERAGENT = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"

with ghost.start():
    session = Session(ghost, download_images=False, display=True, user_agent=USERAGENT)
    page, rs = session.open("https://m.facebook.com/login.php", timeout=120)
    assert page.http_status == 200

    session.evaluate("""
    document.querySelector('input[name="email"]').value = 'email@email.com';
    document.querySelector('input[name="pass"]').value = 'email-password';
    """)

    session.evaluate("""document.querySelector('input[name="login"]').click();""",
                 expect_loading=True)

    """
    import codecs

    with codecs.open('fb.html', encoding='utf-8', mode='w') as f:
       f.write(session.content)
    """

    # session.save_cookies('fbookie')
    session.capture_to(path='fbookie.png')

    # gracefully clean off to avoid errors
    session.webview.setHtml('')
    session.exit()

使用上述iChux的解决方案登录桌面修改如下:

from ghost import Ghost, Session

ghost = Ghost()
USERAGENT = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"

with ghost.start():
    session = Session(ghost, download_images=False, display=True, user_agent=USERAGENT)
    page, rs = session.open("https://www.facebook.com/?stype=lo&jlou=AfeuEMqFUkvZMOq7J0MmLJ6USegaIUsBJ5NAu-Qs3_JCE6MOHJGbiY-017Ob9CQCLUyUZ43Yuu2Etp091voL7O26&smuh=61591&lh=Ac_ChjmeXXM3DLIs", timeout=120)
    assert page.http_status == 200

    session.evaluate("""
    document.querySelector('input[name="email"]').value = 'email';
    document.querySelector('input[name="pass"]').value = 'password';
    """)

    session.evaluate("""document.querySelector('#loginbutton').click();""",
                 expect_loading=True)


    import codecs

    with codecs.open('fb.html', encoding='utf-8', mode='w') as f:
       f.write(session.content)


    # session.save_cookies('fbookie')
    #session.capture_to(path='fbookie.png')

    # gracefully clean off to avoid errors
    session.webview.setHtml('')
    session.exit()