我想要做的是打开一个页面(例如youtube)并自动登录,就像我在浏览器中手动打开它一样。
据我了解,我必须使用cookie,问题是我不知道如何使用。
我尝试使用以下方法下载YouTube Cookie:
driver = webdriver.Firefox(executable_path="driver/geckodriver.exe")
driver.get("https://www.youtube.com/")
print(driver.get_cookies())
Run Code Online (Sandbox Code Playgroud)
我得到的是:
{'name':'VISITOR_INFO1_LIVE','value':'EDkAwwhbDKQ','path':'/','domain':'.youtube.com','expiry':None,'secure':False,'httpOnly ':真实}
那我必须加载什么cookie才能自动登录?
Jul*_*Wgs 12
我建议使用 json 格式,因为 cookie 本质上是字典和列表。否则这就是批准的答案。
import json
def save_cookie(driver, path):
with open(path, 'w') as filehandler:
json.dump(driver.get_cookies(), filehandler)
def load_cookie(driver, path):
with open(path, 'r') as cookiesfile:
cookies = json.load(cookiesfile)
for cookie in cookies:
driver.add_cookie(cookie)
Run Code Online (Sandbox Code Playgroud)
您可以pickle用来将Cookie保存为文本文件,并在以后加载:
def save_cookie(driver, path):
with open(path, 'wb') as filehandler:
pickle.dump(driver.get_cookies(), filehandler)
def load_cookie(driver, path):
with open(path, 'rb') as cookiesfile:
cookies = pickle.load(cookiesfile)
for cookie in cookies:
driver.add_cookie(cookie)
Run Code Online (Sandbox Code Playgroud)
我有一个场景,我想重复使用经过身份验证/登录的会话。我同时使用多个浏览器。
\n我已经尝试了博客和 StackOverflow 答案中的大量解决方案。
\n1. 使用用户数据目录和配置文件目录\n如果您一次打开一个浏览器,这些 chrome 选项可以解决问题,但如果您打开多个窗口,则会抛出错误user data directory is already in use.
Cookie 可以在多个浏览器之间共享。SO 答案中提供的代码包含有关如何在 selenium 中使用 cookie 的大部分重要块。在这里,我将扩展这些解决方案以完成流程。
\n# selenium-driver.py\nimport pickle\nfrom selenium import webdriver\n\n\nclass SeleniumDriver(object):\n def __init__(\n self,\n # chromedriver path\n driver_path='/Users/username/work/chrome/chromedriver',\n # pickle file path to store cookies\n cookies_file_path='/Users/username/work/chrome/cookies.pkl',\n # list of websites to reuse cookies with\n cookies_websites=["https://facebook.com"]\n\n ):\n self.driver_path = driver_path\n self.cookies_file_path = cookies_file_path\n self.cookies_websites = cookies_websites\n chrome_options = webdriver.ChromeOptions()\n self.driver = webdriver.Chrome(\n executable_path=self.driver_path,\n options=chrome_options\n )\n try:\n # load cookies for given websites\n cookies = pickle.load(open(self.cookies_file_path, "rb"))\n for website in self.cookies_websites:\n self.driver.get(website)\n for cookie in cookies:\n self.driver.add_cookie(cookie)\n self.driver.refresh()\n except Exception as e:\n # it'll fail for the first time, when cookie file is not present\n print(str(e))\n print("Error loading cookies")\n\n def save_cookies(self):\n # save cookies\n cookies = self.driver.get_cookies()\n pickle.dump(cookies, open(self.cookies_file_path, "wb"))\n\n def close_all(self):\n # close all open tabs\n if len(self.driver.window_handles) < 1:\n return\n for window_handle in self.driver.window_handles[:]:\n self.driver.switch_to.window(window_handle)\n self.driver.close()\n\n def quit(self):\n self.save_cookies()\n self.close_all()\n\n\ndef is_fb_logged_in():\n driver.get("https://facebook.com")\n if 'Facebook \xe2\x80\x93 log in or sign up' in driver.title:\n return False\n else:\n return True\n\n\ndef fb_login(username, password):\n username_box = driver.find_element_by_id('email')\n username_box.send_keys(username)\n\n password_box = driver.find_element_by_id('pass')\n password_box.send_keys(password)\n\n login_box = driver.find_element_by_id('loginbutton')\n login_box.click()\n\n\nif __name__ == '__main__':\n """\n Run - 1\n First time authentication and save cookies\n\n Run - 2\n Reuse cookies and use logged-in session\n """\n selenium_object = SeleniumDriver()\n driver = selenium_object.driver\n username = "fb-username"\n password = "fb-password"\n\n if is_fb_logged_in(driver):\n print("Already logged in")\n else:\n print("Not logged in. Login")\n fb_login(username, password)\n\n selenium_object.quit()\nRun Code Online (Sandbox Code Playgroud)\n$ python selenium-driver.py\n[Errno 2] No such file or directory: '/Users/username/work/chrome/cookies.pkl'\nError loading cookies\nNot logged in. Login\nRun Code Online (Sandbox Code Playgroud)\n这将打开 Facebook 登录窗口并输入用户名密码进行登录。登录后,它将关闭浏览器并保存 cookie。
\n$ python selenium-driver.py\nAlready logged in\nRun Code Online (Sandbox Code Playgroud)\n这将使用存储的 cookie 打开登录的 Facebook 会话。
\n要求
\n| 归档时间: |
|
| 查看次数: |
9544 次 |
| 最近记录: |