我已经想到了这个项目。其中一部分是登录 Facebook 帐户。 这段代码在我的本地机器(windows)和本地服务器(ubuntu)上完美运行,但当我在在线 Linux 服务器上运行它时它不起作用。
def login_facebook(driver, email, password):
try:
logging.info("Logging into Facebook...")
driver.get('https://www.facebook.com')
email_input = WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.ID, 'email'))
)
logging.info("Email found")
email_input.send_keys(email)
password_input = WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.ID, 'pass'))
)
logging.info("Password found")
password_input.send_keys(password)
password_input.send_keys(Keys.RETURN)
logging.info("Keys sent")
# Adjust XPath or use a different locator strategy
WebDriverWait(driver, 120).until(
EC.visibility_of_element_located((By.XPATH, '//*[@aria-label="Facebook"]'))
)
logging.info("Logged into Facebook successfully.")
except Exception as e:
error_message = f"Error while logging into Facebook: {str(e)}"
logging.error(error_message)
send_error_email(error_message)
经过几个小时的调试后我仍然不知道如何解决可以,但我知道什么是行不通的。 该代码在检查“//*[@aria-label="Facebook"]”之前可以完美运行。 时间一分一秒过去,登录失败。 正如我之前所说,代码在我的 Windows 机器和本地 ubuntu 服务器上完美运行,根本没有任何更改,因此很难找到解决方案。
我尝试将 aria-label 更改为其他内容,但是仍然什么都没有。
这是错误,即使它不是很直接,也许它可以提供帮助:
2024-07-21 03:01:02,836 - ERROR - Error while logging into Facebook: Message:
Stacktrace:
#0 0x639c45d33c4a <unknown>
#1 0x639c45a2e29c <unknown>
#2 0x639c45a79bc1 <unknown>
#3 0x639c45a79cb1 <unknown>
#4 0x639c45abdf94 <unknown>
#5 0x639c45a9c96d <unknown>
#6 0x639c45abb33a <unknown>
#7 0x639c45a9c6e3 <unknown>
#8 0x639c45a6c879 <unknown>
#9 0x639c45a6d1ce <unknown>
#10 0x639c45cfc96f <unknown>
#11 0x639c45d00af6 <unknown>
#12 0x639c45ce979c <unknown>
#13 0x639c45d01291 <unknown>
#14 0x639c45ccf6ce <unknown>
#15 0x639c45d230d8 <unknown>
#16 0x639c45d232e6 <unknown>
#17 0x639c45d32cfd <unknown>
#18 0x7cdf49edeac3 <unknown>
非常感谢任何帮助。
根据提供的信息,遇到的问题似乎与 Facebook 登录过程本身无关,而是与在线 Linux 服务器的环境或网络配置有关。此问题在的本地 Windows 和 Ubuntu 机器上不会发生,这表明问题出在服务器环境中。
以下是可能导致此问题的几个原因以及可以尝试的解决方案:
-
网络连接问题:
-
服务器防火墙: 的服务器防火墙可能阻止了对 Facebook 域的访问。确保端口 443(HTTPS)对
www.facebook.com
开放。 -
DNS 解析:
的服务器可能无法正确解析 Facebook 的域名。尝试使用
nslookup www.facebook.com
进行测试。如果无法解析,请检查的 DNS 设置或联系的托管服务提供商。 -
网络延迟: 的服务器与 Facebook 服务器之间的网络连接可能存在延迟。尝试使用
ping www.facebook.com
检查延迟。如果延迟很高,则可能会导致超时问题。 -
浏览器/WebDriver 配置:
-
无头模式: 如果使用的是无头浏览器(例如,无 GUI 的 Chrome 或 Firefox),则 Facebook 可能会检测到它并阻止登录。尝试使用带 GUI 的浏览器或调整无头浏览器设置以更好地模拟真实用户。
- 用户代理: 的 WebDriver 可能正在发送一个过时或不受支持的用户代理字符串,这会导致 Facebook 阻止登录。尝试使用最新的用户代理字符串。
-
浏览器版本: 请确保使用的浏览器版本与的 WebDriver 版本兼容。
-
Facebook 安全机制:
-
可疑登录尝试: Facebook 可能将来自的服务器的登录尝试检测为可疑活动并阻止了它。尝试使用其他帐户或 IP 地址登录以查看问题是否仍然存在。
-
双重身份验证: 如果的 Facebook 帐户启用了双重身份验证,则需要在脚本中实现相应的逻辑来处理它。
-
其他问题:
-
缺少依赖项: 确保的服务器上安装了所有必需的依赖项,包括 Chrome/Firefox 浏览器本身以及相应的 WebDriver。
- 服务器资源: 如果的服务器资源有限(例如,内存或 CPU),则可能会导致 WebDriver 运行缓慢或崩溃。
调试步骤:
- 检查服务器日志: 检查的服务器日志以获取有关该问题的更多信息。
- 启用 WebDriver 日志记录: 启用 WebDriver 日志记录以获取有关浏览器和 WebDriver 之间交互的更多详细信息。
- 逐步执行代码: 使用调试器逐步执行代码,以查看问题发生的确切位置。
其他建议:
- 尝试使用 Facebook 提供的官方 API 来执行登录,而不是使用 Selenium 进行网页抓取。
- 联系的托管服务提供商以获取进一步的帮助。
请记住,使用 Selenium 自动化登录 Facebook 违反了 Facebook 的服务条款。请谨慎操作,并考虑使用 Facebook 提供的官方 API 来实现的目标。
标签:python,linux,selenium-webdriver,facebook-login From: 78773743