我有一个简单的程序可以登录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”可以解决该错误。
答案 0 :(得分:1)
chrome_options.add_argument('--no-sandbox')
Roymunson报告说,解决悬挂问题的适当方法是:
避免在网络驱动程序中指定--no-sandbox
选项。