Selenium-登录Facebook导致Web驱动程序无限期停止

时间:2019-05-04 18:21:32

标签: python-3.x selenium selenium-webdriver selenium-chromedriver

我有一个简单的程序可以登录Facebook并获取3个网址:

def setup_driver():
    prefs = {"profile.default_content_setting_values.notifications": 2}
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_experimental_option("prefs", prefs)
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')
    driver = webdriver.Chrome(executable_path="./chromedriver_linux",
                              chrome_options=chrome_options)
    return driver

def log_into_facebook(driver):
    driver.get("https://www.facebook.com/")
    email_field = driver.find_element_by_id("email")
    email_field.send_keys("<MY EMAIL ADDRESS>")
    password_field = driver.find_element_by_id("pass")
    password_field.send_keys("<MY FB PASSWORD>")
    driver.find_element_by_id("loginbutton").click()

if __name__ == "__main__":

    driver = setup_driver()
    log_into_facebook(driver)
    print("before getting url 1")
    driver.get('https://facebook.com/2172111592857876')
    print("before getting url 2")


 #Stackoverflow is breaking indentation
driver.get('https://www.facebook.com/beaverconfessions/posts/2265225733546461')
    print("before getting url 3")
    driver.get('https://www.facebook.com/beaverconfessions/posts/640487179353666')
    print("finished getting 3 urls")

在我的本地计算机上,该程序运行良好。但是,在我的AWS EC2实例上,此程序使我的实例不可用(Python脚本将在“获取url 2之前”打印到控制台后挂起/停止。在脚本挂起时,EC2实例将变得如此缓慢,以至于其他实例实例上的程序也会停止正常运行。我需要使用Ctrl-C强制关闭程序,以使实例再次开始响应。)但是,如果我注释掉log_into_facebook(driver),则程序可以正常运行。

我会尝试获取一个堆栈跟踪,但是该程序实际上并没有崩溃,而是永远不会到达“在获取URL 3之前”。

这毫无用处,以前我在与此程序类似的程序中收到“无效的会话ID”错误(它也登录Facebook,然后多次调用driver.get。)

更新:从--no-sandbox中删除webdriver选项似乎可以解决问题。我不知道为什么。我最初使用此选项是因为我以前遇到过“无法修复打开的页面”错误,并且我读到“ --no-sandbox”可以解决该错误。

1 个答案:

答案 0 :(得分:1)

    chrome_options.add_argument('--no-sandbox')

Roymunson报告说,解决悬挂问题的适当方法是:

避免在网络驱动程序中指定--no-sandbox选项。