我正在尝试创建一个使用Selenium登录Google Gmail网站的测试套件。 问题是Selenium会打开一个新的Chrome窗口(如隐身模式)而没有Cookie。 我的代码:
driver = webdriver.Chrome(executable_path=r'chromedriver.exe')
driver.get("https://hangouts.google.com/")
elem = driver.find_element_by_id("gb_70")
elem.send_keys(Keys.RETURN)
elem2 = driver.find_element_by_id("identifierId")
elem2.send_keys("mygmail@gmail.com")
elem2.send_keys(Keys.RETURN)
time.sleep(2)
elem3 = driver.find_element_by_xpath("//*[@class='whsOnd zHQkBf']")
elem3.send_keys("myPass")
elem3.send_keys(Keys.RETURN)
根据我在互联网上阅读的内容,可以创建2个会话,一个用于存储cookie,第二个用于使用这些cookie。 但这不是我正在寻找的东西,我需要它来使用Chrome存储的cookie。
我尝试手动阅读Chrome的Cookie(来自APPDATA),但它似乎是由浏览器加密的。
答案 0 :(得分:5)
如果您需要在会话之间使用Cookie,还有其他方法可以执行此操作,请使用Chrome选项user-data-dir将文件夹用作配置文件,我运行:
chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")
你可以在这里执行检查人工交互的登录,我这样做,然后我现在需要的cookie,每次我启动Webdriver与该文件夹一切都在那里。您也可以手动安装扩展程序并在每个会话中使用它们。 Secon我跑的时间,所有的饼干都在那里:
chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com") #Now you can see the cookies, the settings, Extensions and the logins done in the previous session are present here
优点是你可以使用具有不同设置和cookie的多个文件夹,不需要加载扩展,卸载cookie,安装和卸载扩展,更改设置,通过代码更改登录,因此无法获得逻辑程序中断等等这也比通过代码完成所有操作更快。
答案 1 :(得分:1)
您需要执行以下步骤:
从你的代码:
PS:如果在 - >之后仍有相同的问题将您的网址更改为" https://accounts.google.com"。
希望它可以帮到你!
答案 2 :(得分:0)
更新:您可以为accounts.gmail.com
设置Cookie<强>为什么吗
Gmail的问题在于,当您尝试登录时,系统会将您重定向到“mail.google.com”,因此您必须在会话中拥有此不同域的Cookie。
如果您的浏览器位于域B中,则Selenium webdriver的add_cookie
方法将不允许您为域A设置Cookie(在Gmail案例中,mail.google.com为A,google.com为B)。
使用Selenium完成任务的唯一方法是导航到mail.google.com,然后在到达此页面时设置cookie,然后再重定向,然后重新开始。这是有问题的,因为如果您导航到mail.google.com,您将立即被重定向,因此您无法设置Cookie。
我会尝试三种方法: