У меня есть простая программа, которая входит в Facebook и получает 3 URL:
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».
Это ничего не стоит, ранее я получал ошибки "недопустимый идентификатор сеанса" с программой, которая была похожа на эту (она также вошла в Facebook и затем несколько раз вызывала driver.get
).
Обновление : удаление опции --no-sandbox
из webdriver
, похоже, решило проблему. Я не уверен почему. У меня изначально была эта опция, потому что раньше у меня была ошибка «невозможно исправить открытые страницы», и я прочитал, что «--no-sandbox» исправит ошибку.