1

有没有办法通过浏览器登录到 facebook 和 google,但不使用提供的 API?到目前为止,我已经尝试mechanize使用cookielib、和webbrowser,但没有得到任何令人满意的结果。我得到的最接近的是使用但通过命令行登录。我有一个应用程序,我想要它做的就是打开浏览器并打开 facebook 或 google 页面,并使用提供的用户名和密码自动登录。requestsseleniummechanize + cookielib

注意:如果这可以用不同的语言更容易地完成,我也对这些感兴趣。

在此先感谢您的帮助!

4

2 回答 2

1

登录 Facebook / 选项 #1 - 套接字:

import urllib2,cookielib

def TryToLoginFB(username,password):
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
    url1 = "https://login.facebook.com"
    url2 = "https://login.facebook.com/login.php?login_attempt=1"
    data = "&email="+username+"&pass="+password
    socket = opener.open(url1)
    socket = opener.open(url2,data)
    return socket

socket = TryToLoginFB("not_gonna_tell_you@gmail.com","my_password")

if "logout" in socket.read():
    print "OK"
else:
    print "Error"

# or use 'socket' in order to do whatever you wanna do at this point...

登录 Facebook / 选项 #2 - 浏览器:

from selenium import webdriver

def TryToLoginFB(username,password):
    browser = webdriver.Firefox()
    browser.get('https://www.facebook.com')
    browser.find_element_by_xpath('//input[@id="email"]').send_keys(username)
    browser.find_element_by_xpath('//input[@id="pass"]').send_keys(password)
    browser.find_element_by_xpath('//input[@value="Log In"]').click()
    return browser

browser = TryToLoginFB("not_gonna_tell_you@gmail.com","my_password")

if "logout" in browser.page_source:
    print "OK"
else:
    print "Error"

# or use 'browser' in order to do whatever you wanna do at this point...

为了在您的机器上安装 Selenium for Python,请从命令行运行“pip install selenium”。

登录电子邮件/选项 #1 - 套接字:

import smtplib,ssl

def TryToLoginEM(username,password):
    server = Connect(username)
    try:
        server.login(username,password)
    except smtplib.SMTPException,error:
        print error
        Disconnect(server)
        return None
    return server

def Connect(username):
    serverName = username[username.index("@")+1:username.index(".")]
    while True:
        try:
            server = smtplib.SMTP(serverDict[serverName])
        except smtplib.SMTPException,error:
            print error
            continue
        try:
            server.ehlo()
            if server.has_extn("starttls"):
                server.starttls()
                server.ehlo()
        except (smtplib.SMTPException,ssl.SSLError),error:
            print error
            Disconnect(server)
            continue
        break
    return server

def Disconnect(server):
    try:
        server.quit()
    except smtplib.SMTPException,error:
        print error

serverDict = {
    "gmail"  :"smtp.gmail.com",
    "hotmail":"smtp.live.com",
    "yahoo"  :"smtp.mail.yahoo.com"
}

server1 = TryToLoginEM("your_email@gmail.com","your_password")
server2 = TryToLoginEM("your_email@hotmail.com","your_password")
server3 = TryToLoginEM("your_email@yahoo.com","your_password")

if server1 and server2 and server3:
    print "OK"
else:
    print "Error"

# or use 'server1/2/3' in order to do whatever you wanna do at this point...

登录电子邮件/选项 #2 - 浏览器:

只需按照“登录 Facebook / 选项 #2”的说明进行操作。

为了找到元素的 xpath,在网络浏览器中打开页面并检查每个元素。

于 2014-01-04T20:28:28.703 回答
1

如果您使用的是 Mac OS X,一种可能的解决方案是通过 appscript Python 模块将 Python 与 Applescript 结合起来:

https://pypi.python.org/pypi/appscript

例如,Clark Goble 在 FedEx 的网站上发布了一个自动填写表格的 Python 脚本示例:

http://www.libertypages.com/clarktech/?page_id=1570

关键是Safari.do_JavaScript语句,它允许您让浏览器浏览页面的 DOM 并通过 Javascript 提交信息。(您也可以在 Applescript 中完成所有操作,但我发现使用 appscript 通常更容易。)

于 2014-01-04T20:36:07.023 回答